【发布时间】:2013-12-27 14:22:24
【问题描述】:
抱歉,我是 C 的新手,想知道如何创建一个在引入 C99 标准之前的编译时大小未知的数组。
【问题讨论】:
-
欢迎您。要求代码的问题必须表明对要解决的问题的最低理解。包括尝试过的解决方案、它们为什么不起作用以及预期的结果。
-
请不要在 1989 C 中编写新软件。
抱歉,我是 C 的新手,想知道如何创建一个在引入 C99 标准之前的编译时大小未知的数组。
【问题讨论】:
这很容易。例如,如果要创建一个可变长度的一维int 数组,请执行以下操作。首先,声明一个指向int类型的指针:
int *pInt;
接下来,为它分配内存。您应该知道需要多少元素 (NUM_INTS):
pInt = malloc(NUM_INTS * sizeof(*pInt));
不要忘记free您的动态分配的数组以防止内存泄漏:
free(pInt);
【讨论】:
sizeof(*pointer) 而不是sizeof(type)。
sizeof 代码,如果你把它写成sizeof(*ptr) 对吧?是这个原因吗?
sizeof on。
使用stdlib.h 中的malloc 函数创建一个动态数组对象。
【讨论】:
通常的方法是在堆上分配数据
#include <stdlib.h>
void myfun(unsigned int n) {
mytype_t*array = (mytype_t*)malloc(sizeof(mytype_t) * n);
// ... do something with the array
free(array);
}
您也可以在堆栈上分配(因此您不需要手动释放):
#include <alloca.h>
void myfun(unsigned int n) {
mytype_t*array = (mytype_t*)alloca(sizeof(mytype_t) * n);
// ... do something with the array
}
【讨论】:
您可以通过dynamic memory allocation 执行此操作。使用malloc函数。
【讨论】:
malloc 或 calloc
YourType* ptr = malloc(sizeof(YourType)*NumberOfItemsYouNeed)
【讨论】: