内存分配和char数组

时间:2015-01-24 22:22:40

标签: c++ c

我仍然不太明白,情况究竟会发生什么:

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)在周期结束时?

或者那些变量将在堆栈中分配,并在函数结束后被销毁?

3 个答案:

答案 0 :(得分:7)

some_array的本地,因此它是在循环的每次迭代开始时创建的,并在循环的每次迭代结束时再次销毁。

在简单数组的情况下,“创建”和“破坏”并不意味着什么。如果(在C ++中)你将它替换为(例如)一个在创建和销毁时打印出来的对象,你会看到这些副作用发生。

答案 1 :(得分:1)

存储字符串有两种方法。 1.使用malloc创建一些空间,然后存储char字符串  在这种情况下,内存是从堆中分配的,并且在您明确释放它之前不会释放内存。即使在范围之后,内存也不会被释放 2.创建一个数组并存储在其中   这里内存是从堆栈中分配的,并在范围

之后隐式释放

答案 2 :(得分:1)

显示的示例没有隐式的malloc()或免费调用。

您可以通过添加&#34; free(some_array)&#34;来证明这一点。循环体内的语句。结果将是编译错误。

就程序而言,数组是在块的开头创建的,并在结束时被销毁。这意味着C程序员必须假设它是为循环的每次迭代创建和销毁的。

编译器是否在堆栈上创建数组 - 或者它如何优化重复创建和销毁数组。实际上,它通常会在堆栈上创建。