array[size]
使用和使用定义在运行时之前定义的长度数组(取决于命令行参数)有什么区别malloc()
?array[i]
导致数据放在堆栈上,malloc()
使用堆[见这个stackoverflow]
因此,对于大数据,我可以遇到 stackoverflows,但在新机器上总共 30 char
s 和int
s 应该没有问题(据此,Windows 上的 Stack 大约为 1MB)。
所以我可能遗漏了一些明显的东西。
据我了解,在 中定义时main()
,两者应该相同:
示例 1
int size; // depends on some logic
char array[size];
示例 2
int size; // depends on some logic
array= (char *)malloc(size * sizeof(char));
free(array); // later after use
但是当我在函数内部使用数组并将其作为指针 ( func(char* array)
) 或数组 ( funct(char array[])
) 传递时,有时 gdb-debugger 会让我知道函数在 #1 中传递了损坏的数据,使用已malloc()
修复的问题。
是array[i]
不是在编译时没有确定就不能用了?这是一些范围问题吗?这个答案有一个评论暗示这样的事情,但我不太明白这是否适用于此。
我正在使用 C99。