【发布时间】:2016-12-25 14:22:17
【问题描述】:
在 SO 上有很多关于这一切的帖子,我明白当使用动态内存分配指针时,指针超出了它们被创建的函数。但我似乎仍然对编译与运行时部分有点困惑.
例如当在运行时第一次知道数组的大小时,似乎规则是您需要使用动态内存分配。但以下在运行时工作得很好:
int main(int argc, char *argv[])
{
char * elems = argv[1];
int intelems = atoi(elems);
int array[intelems];
for (int i=0; i<intelems; i++) {
array[i] = 42 + i;
}
for (int i=0; i<intelems; i++) {
printf("%d\n", array[i]);
}
return 0;
}
所以在我编译了上面的程序之后,我可以在运行程序时指定我需要的任何大小的数组。
在上面的示例中必须进行哪些更改才能更清楚地表明除非我为数组动态分配内存,否则它将无法工作?
【问题讨论】:
-
以上不是动态内存,而是数组的存储时长。您的数组具有可变长度,但它仍然具有自动存储持续时间。如果您要使用
malloc,它将具有已分配 存储持续时间。
标签: c arrays memory-management