【发布时间】:2013-11-15 18:53:42
【问题描述】:
所以我正在阅读一个类的一些代码,我对如何在 C 中释放变量感到有些困惑。
给出的代码是
#include<stdio.h>
main () {
int n=0;
char *p = "hello world";
while (*p!= 0) { // *p != '\0';
putc(*p, stdout);
p++;
}
printf("\np = %d", *p);
printf("\np = %d\n", p);
}
所以我知道您不需要为 char* 释放任何内存,因为没有发生 malloc,但我不明白为什么这段代码不会泄漏任何内存...如果您要为一个字符串,从而将指针移动到下一个内存块(1字节),那么您不会丢失初始引用和您递增的所有引用点吗?如果没有参考点,该内存将如何回收,除非在此类操作发生之前由编译器保存。我将不胜感激有关如何回收的一些见解!
【问题讨论】:
-
变量在超出范围时被释放。当有人释放堆时,堆被释放。文字值(即编译代码中的静态字符串)在程序的整个生命周期中都存在。您担心的空间是文字字符串。