c中的垃圾收集器用于循环内的变量

as3*_*unt 2 c garbage-collection memory-leaks memory-management

我主要是一个Java人员,最近正在处理一些涉及C的项目,所以如果这是一个基本的C问题,请耐心等待.

所以在我的主要内部我有一个while循环,我每次迭代都声明一个变量.

int main()
{
  int done = 0;
  while(!done)
  {
    char input[1024];
    scanf("%s", input);
    //parse the input string
    ...
  }
} 
Run Code Online (Sandbox Code Playgroud)

现在因为输入变量每次都会改变,这取决于用户想要什么,我每次都必须使用"新"变量.但是,我认为上述声明最终会导致内存泄漏(或者会吗?).我想知道gcc是否负责垃圾收集.

在每次迭代后没有分配和释放有没有更好的方法?

das*_*ght 6

我认为上述声明最终会导致内存泄漏(或者会是什么?).

不,它不会:input是一个自动(AKA"堆栈")变量,一旦它超出范围(即在结束括号后),它将被"解除分配".

在每次迭代后没有分配和释放有没有更好的方法?

没有实际的分配或释放:自动存储器中的空间(堆栈中的AKA)由堆栈指针周围的一些编译时簿记分配.自动变量的访问是一个非常快速的操作,在很大程度上由硬件辅助,因此不会有效率损失.

动态内存分配(Java风格)与做malloc/ calloc/ realloc在C.这些都不是垃圾收集-你需要明确free每一个你分配的指针.