处理结构数组时内存损坏

标签 c arrays memory

我有一个看起来像这样的值结构:

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/

相关文章:

c++ - C 与 C++ 中的枚举范围

c++ - Clion 内存 View

c++ - 使用 SFML 在第二台显示器上打开全屏窗口?

c - 当我将该程序用于大数据时,我的程序显示 "filename.exe"已停止工作

Java从给定的数组列表动态生成各种字段类型

c# - 数组中数字的排列

c++ - 基于共享内存的聊天应用程序的问题

c - 读取文件的线程安全

c - 在 C 到 VB 控件中渲染图形

PHP 数组 : Contents from result set