[英]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
成员而不分配它-这将导致崩溃。 你需要malloc
的amicablePair
还有amicable
。
您返回的是(友好*)-指向友好的指针,但是您的函数会创建一个(友好)(而不是一个“友好”)。
而不是声明
amicable record;
您需要执行此操作(或等效操作):
amicable *record = (amicable *) malloc(sizeof(amicable));
然后通过“ record->”而不是“ record”进行访问。
注意:使用上述方法时,您需要在完成分配后释放()以上分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.