检查在C中成功创建的数组

时间:2014-04-24 22:32:17

标签: c arrays memory

在C中有两种创建数组的方法:

int array[100]; 

int * array = malloc(sizeof(int)*100); 

使用第二个语句很容易检查是否有足够的可用内存来创建数组,例如:

if(array == NULL){
   goto OutOfMemory;
}

但是你怎么检查第一个成功的?假设这是在微控制器而不是计算机上运行的。

2 个答案:

答案 0 :(得分:10)

堆栈上的数组分配(第一种方式)没有可恢复的故障。它只会失败,如果分配它会导致堆栈溢出,此时程序已中止/终止。

当您以第一种方式分配数组时,它通常在函数调用时被分配在堆栈上。如果堆栈上没有足够的空间来分配它,程序就会因堆栈溢出/段错误而中止。

当您分配第二种方式时,在实际调用malloc时,您正在向内存管理器询问堆上的内存。

编辑:正如@Deduplicator所提到的,如果你在一个没有内存保护的系统上,没有足够的可用堆栈空间来分配数组可能会导致超支和更微妙的问题(尽管很可能它会失败)很快就是非法指令)。

答案 1 :(得分:1)

第一段代码将数组存储在stack中 第二个将数组存储在heap

堆栈内存是在线程之前预先分配的,尽管如此,除非你在堆栈上分配大量数据,否则你通常不应该担心堆栈空间。

Checking available stack size in C

编辑: 在这种情况下,您应该事先确保您有足够的堆栈(在IDE /编译器/链接器/专有软件中定义),以便在整个代码执行期间进行最大限度的调用。这可以在编译时提前知道,不需要运行时检查。