如何释放已用于C中变量的内存?

我如何在C中释放我用于变量(例如长字符串)的内存?

假设您动态分配了内存(使用malloc或其他内存分配器),您可以使用free释放它。 如果内存是静态分配的,则无法释放它。

这实际上取决于你如何声明你的变量 – 如果它是一个常规变量你不能“释放”它的内存 – 当它超出这里的范围时它将被释放:

 for (int i=0;i<10;i++) { int k=i; //do stuff } 

当你退出循环时我将被释放,并且k将在每次通过循环体时被分配和释放。

当它是关于运行时内存分配时,你可以使用你可靠的malloc和免费:)

 int* intArray; malloc(200 * sizeof(int)); 

这将为您提供200个整数的数组。

假设您没有使用malloc,并且正在使用创建字符串或缓冲区

 char array[100]; 

但是你知道你只是在长函数的一小部分中使用它,你可以将函数的那部分放在另一组{}中

 int reallylongfunction() { // Do a lot of stuff { char stringbuffer[100]; // Do stuff with the buffer... // Ok, we're done with the buffer, and don't want it anymore } // Do a lot more stuff return; } 

这将导致缓冲区超出范围,并被释放。 但要小心,你在extra {}中声明的任何内容都将超出范围并消失!

编辑:该死的,评论是对的。 超出范围的静态字符串没有任何好处。 编辑所以它只是一个数组。

没有更多信息,这个问题真的无法回答。 知道如何释放对象(或者甚至知道是否应该释放它)的唯一方法是知道如何分配对象。

当我说对象时,我的意思不仅仅是C ++’对象’,而是C对象标准中使用的’对象’:

执行环境中的数据存储区域,其内容可以表示值

我建议你看看ustr ,这是一个字符串API,你可以使用自动,恒定和动态分配的字符串…其中只有两个你可以实际“免费”,但所有你可以对待它同样的方式并传递给ustr_free()。

您可能仍然想要了解堆栈,堆和数据(RO文本字符串)是如何“分配”和“释放”的…但是在您学习时使用可用的API会停止帮助您(并且会比你自己做的快得多。