簡體   English   中英

函數返回結構中的錯誤

[英]error in function returning structure

#include<stdio.h>
#include "amicablenumber.h"

int i,j;
struct amicable         
{
    int **amicablePair;
    int size;
};

main()
{

int startnum = 250;
int endnum = 1000;
struct amicable* ami;

ami = getAmicablePairs(startnum, endnum);   

printf("{");
for(int i = 0; i<ami->size; i++)
{
printf("{%d, %d}",ami->amicablePair[i][0], ami->amicablePair[i][1]);
}
printf("}");
}

amicable *getAmicablePairs(int startnum,int endnum)
{
    int size=0;
    int sumfactors(int);
    amicable record;
 for(i=startnum;i<=endnum;i++)
 {
 for(j=endnum;j>=startnum;j--)
 {
 if((sumfactors(i)==j)&&(sumfactors(j)==i) && (i!=j))
 {
  record.amicablePair[size][0]=i;
  record.amicablePair[size][1]=j;

  size++;
 }}}
 record.size=size;
 return record;
 }

  int sumfactors(int number)
 {
 int sum=0;
 for(i=1;i<number;i++)
 {
 if(number%i==0)
 sum +=i;
 }
 return sum;
 }

在上面的代碼中我收到錯誤

不能將友善轉換為友善*

聲明getAmicablePairs返回指向amicable的指針:

amicable *getAmicablePairs(...)

但您隨后嘗試返回amicable

return record;

而不是一個指針。

請注意,一個“顯而易見的”修復是返回指向record的指針:

return &record;

將不起作用,因為一旦getAmicablePairs返回,您將返回一個將要消失的變量的指針。 相反,您需要使用malloc創建一條記錄並將其返回; 像這樣的東西:

amicable *record = (amicable*) malloc(sizeof(amicable));

您需要更改所有record. 進入record->

還要注意,您正在寫入結構的amicablePair成員而不分配它-這將導致崩潰。 你需要mallocamicablePair還有amicable

您返回的是(友好*)-指向友好的指針,但是您的函數會創建一個(友好)(而不是一個“友好”)。

而不是聲明

amicable record;

您需要執行此操作(或等效操作):

amicable *record = (amicable *) malloc(sizeof(amicable));

然后通過“ record->”而不是“ record”進行訪問。

注意:使用上述方法時,您需要在完成分配后釋放()以上分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM