为结构中的变量分配内存的最佳方法是什么?

ZPS*_*ZPS 1 c memory arrays data-structures

例如,我有这个结构和代码:

typedef struct
{
long long *number;
} test;

test * test_structure;
test_structure = malloc(sizeof(test));
test_structure->number = malloc(sizeof(long long) * 100);
free(test_structure->number);
free(test_structure);
Run Code Online (Sandbox Code Playgroud)

与此结构和代码:

typedef struct
{
long long number[100];
} test;

test * test_structure;
test_structure = malloc(sizeof(test));
free(test_structure);
Run Code Online (Sandbox Code Playgroud)

因为我知道这个数字阵列将永远是100,或者是这些方法完全可以接受的,或者是一种方法比其他更好的,为什么?

Jon*_*ler 6

第二种方式更好,原因如下:

  1. 您只需要释放一个分配,而不是两个(减少内存泄漏的可能性).
  2. 您已在数据结构中编码了数组的大小,这有助于代码分析.第一个版本可以有任何大小,没有人可以说任何下标都是错误的.如果你添加了一个适当初始化为第一个结构的'size'成员,那么这个参数的力量就会减少,但力量不会太大.
  3. 您可以使用结构分配复制整个第二个结构; 你不能以同样的方式复制第一个结构.
  4. 生成的汇编程序与第一个汇编程序略有不同(更长)(它必须从成员中获取地址,然后取消引用它,而不是仅使用第二个取消引用).

尽管如此,这两种方法基本相同.你使用(我很想说'浪费',但这不太公平)与第一个相比更多的空间,但它不太可能是一个主要问题(如果是,你可能想要改变大小100,因为这将节省你比修补指针与数组更多的空间).