我是C的新手。我已经看到,在许多示例中,malloc()总是与free()配对。但是,如果我做这样的事情:比如说,* p =“一个字符串”,我可以释放指针p并导致内存泄漏问题吗?
编辑:感谢所有的回复! 所以我的问题变成:如果我在一个函数中有* p =“一个字符串”,这是否意味着当函数结束时,编译器会自动“释放”用于此函数调用的所有内存,所以我不这样做必须手动管理任何处理内存的东西?答案 0 :(得分:4)
不,你不能释放它,你也不能。
当你指针指向例如一个字符串文字,它指向你没有分配的内存。您应该只释放您明确分配的内存(例如malloc
,calloc
或strdup
)。
其他功能也可以分配你需要释放的内存,但是他们应该在他们的文档中说明。
作为一般经验法则:如果你明确地分配了一些资源(比如内存或文件),那么你也应该释放它。
答案 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
会让您遇到麻烦。
你不能试图删除指针内存;这也是未定义的行为。
黄金法则:malloc
和free
始终配对。
请放心,在您的情况下,字符串文字占用的内存将在程序退出时由C运行时正常释放回操作系统。