0

我是 C 新手。我已经看到在许多示例中 malloc() 总是与 free() 配对。但是如果我这样做:比如 *p = "a string" ,我可以释放指针 p 吗?它会导致内存泄漏问题吗?

编辑:感谢所有回复!所以我的问题变成了:如果我在函数中有 *p = "a string",这是否意味着当函数结束时编译器将自动“释放”用于该函数调用的所有内存,所以我不必须手动管理任何东西来处理内存?

4

5 回答 5

4

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

当您使指针指向例如字符串文字时,它指向不是您分配的内存。您应该只释放您明确分配的内存(例如malloccallocstrdup)。

其他函数也可能会分配您需要释放的内存,但是他们应该在他们的文档中说明这一点。

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

于 2013-10-22T14:03:25.850 回答
1

当你这样做时*p = "a string",你有一个指向p字符串文字的指针。在这种情况下,不会动态分配内存。所以,没有必要释放p,你也不应该。

于 2013-10-22T14:03:17.417 回答
1

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

于 2013-10-22T14:03:34.253 回答
1

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

内存管理的基本规则:如果你调用malloc()了内存,你应该free()在不需要的时候释放它。

于 2013-10-22T14:03:34.337 回答
1

对于初学者,您应该编写const char *p = "a string";,因为修改字符串文字是未定义的行为p[0] = 'A';(例如,使用类似的语句)。放弃const会使你陷入困境。

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

黄金法则:总是成对malloc的。free

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

于 2013-10-22T14:05:56.173 回答