我仍然不太明白,情况究竟会发生什么:
int i = 0;
for(i; i <100; i ++)
{
char some_array[24];
//...
strcpy(some_array,"abcdefg");
}
some_array
是否会充当:
some_array = malloc(24);
在周期开始时
free(some_array)
在周期结束时?
或者那些变量将在堆栈中分配,并在函数结束后被销毁?
答案 0 :(得分:7)
some_array
是块的本地,因此它是在循环的每次迭代开始时创建的,并在循环的每次迭代结束时再次销毁。
在简单数组的情况下,“创建”和“破坏”并不意味着什么。如果(在C ++中)你将它替换为(例如)一个在创建和销毁时打印出来的对象,你会看到这些副作用发生。
答案 1 :(得分:1)
存储字符串有两种方法。 1.使用malloc创建一些空间,然后存储char字符串 在这种情况下,内存是从堆中分配的,并且在您明确释放它之前不会释放内存。即使在范围之后,内存也不会被释放 2.创建一个数组并存储在其中 这里内存是从堆栈中分配的,并在范围
之后隐式释放答案 2 :(得分:1)
显示的示例没有隐式的malloc()或免费调用。
您可以通过添加&#34; free(some_array)&#34;来证明这一点。循环体内的语句。结果将是编译错误。
就程序而言,数组是在块的开头创建的,并在结束时被销毁。这意味着C程序员必须假设它是为循环的每次迭代创建和销毁的。
编译器是否在堆栈上创建数组 - 或者它如何优化重复创建和销毁数组。实际上,它通常会在堆栈上创建。