C指针和内存泄漏

时间:2013-10-22 14:00:58

标签: c pointers memory free memory-leaks

我是C的新手。我已经看到,在许多示例中,malloc()总是与free()配对。但是,如果我做这样的事情:比如说,* p =“一个字符串”,我可以释放指针p并导致内存泄漏问题吗?

编辑:感谢所有的回复! 所以我的问题变成:如果我在一个函数中有* p =“一个字符串”,这是否意味着当函数结束时,编译器会自动“释放”用于此函数调用的所有内存,所以我不这样做必须手动管理任何处理内存的东西?

5 个答案:

答案 0 :(得分:4)

不,你不能释放它,你也不能。

当你指针指向例如一个字符串文字,它指向你没有分配的内存。您应该只释放您明确分配的内存(例如malloccallocstrdup)。

其他功能也可以分配你需要释放的内存,但是他们应该在他们的文档中说明。

作为一般经验法则:如果你明确地分配了一些资源(比如内存或文件),那么你也应该释放它。

答案 1 :(得分:1)

执行*p = "a string"时,指针p指向字符串文字。在这种情况下,没有动态分配内存。所以,你不需要免费p

答案 2 :(得分:1)

没有。 “字符串”是存储在只读静态存储器中的数据,p是指向它的指针。你只释放指向使用malloc分配的内存的指针。

答案 3 :(得分:1)

您不需要释放此指针,因为它指向字符串常量。如果你试图释放它,它实际上可能会导致未定义的行为。

内存管理的基本规则:如果你调用malloc()来获取内存,那么当你不需要它时,你应该使用free()来释放它。

答案 4 :(得分:1)

对于初学者,您应该编写const char *p = "a string";,因为它是未定义的行为来修改字符串文字(例如使用p[0] = 'A';之类的语句)。删除const会让您遇到麻烦。

你不能试图删除指针内存;这也是未定义的行为

黄金法则:mallocfree 始终配对。

请放心,在您的情况下,字符串文字占用的内存将在程序退出时由C运行时正常释放回操作系统。