我有一个看起来像这样的值结构:
typedef struct SName
{
char abc[10];
float xyz;
} TName;
为了填充这个,我得到了一个函数,它基本上创建一个 TName 并用 strncpy 填充值或将值分配给 float 。看起来像这样:
TName fillOne(){
TName* myObj = (TName*)malloc(sizeof(TName));
//fill values
return *myObj;
}
这就像一个魅力,在 XCode 中使用断点检查返回值表明所有值都已正确填写。 现在我想创建一个 TName 数组:
TName *arrayOfTNames(){
TName fullArray[100];
*fullArray = *(TName*)malloc(100*sizeof(TName));
//Now loop 100 times and do fullArray[count]=fillOne();
return fullArray;
}
在迭代次数少于 100 次的样本上使用 XCode 检查我现在得到了我想要的东西,但在 95 插槽中我有随机内存值,这些值不应该存在。 现在有两个问题: 1. 在使用从 arrayofTNames() 获得的结果之前,我从不使用 free 是对的吗? 2、如何正确处理arrayOfTNames的返回值?
最佳答案
您不必使用 malloc 来分配内存。您可以只使用您的结构。
TName fillOne(){
TName myObj;
//fill values
return myObj;
}
也会工作,并返回 myObj
的副本。
返回一个数组是不可能的,所以你必须将数组放在另一个结构中(并返回它),或者返回一个指向已分配内存的指针:
TName *arrayOfTNames(){
TName* fullArray = malloc(100 * sizeof(TName));
//Now loop 100 times and do fullArray[count] = fillOne();
return fullArray;
}
然后不要忘记在处理完数组后释放
内存。
关于处理结构数组时内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083375/