内存泄漏/ C++中的内存分配

Pra*_*bhu 3 c++ memory-leaks memory-management visual-c++

我在C++中有以下功能

void func1()
{
    char *p = "Test for memory leak";
}
Run Code Online (Sandbox Code Playgroud)

何时func1()被调用哪里是分配的变量的内存?无论是在堆栈还是堆中?应该delete p;明确调用?

sha*_*oth 15

字符串文字的内存在静态存储中分配,分配持续时间用于整个程序运行时.你不应该调用delete - 调用delete会导致未定义的行为.


Nav*_*een 10

不,内存仅分配给p堆栈上的指针.p超出范围时,将自动回收此内存.p只是指向一个字符串,该字符串存储在程序的只读部分中的某些位置.理想情况下,它应定义为const char *p.如果你尝试delete它,它将是未定义的行为.作为一项规则,您可以记住,每次拨打电话都new需要拨打电话delete

  • `char const*p`的+1 - 强制指针只读是好行为,因为它反映了指针的意图 - 只读. (5认同)