use*_*107 0 c++ linux memory memory-leaks
我的C++程序有一个错误:
#include<iostream>
using namespace std;
char* foo()
{
char * mystr = new char[6];
mystr = "Hello";
return mystr ;
}
int main()
{
char* myString =foo();
printf("%s \n", myString);
delete [] myString ;
}
==27472== Invalid free() / delete / delete[]
==27472== at 0x4A07A12: operator delete[](void*) (vg_replace_malloc.c:409)
==27472== by 0x4007EB: main (printHello.cpp:16)
==27472== Address 0x4008f8 is not stack'd, malloc'd or (recently) free'd
Run Code Online (Sandbox Code Playgroud)
如果我删除delete [] myString ;
它运作良好.
我应该释放堆上分配的内存,对吧?
但是,如果我删除它,为什么我会收到错误.
谢谢
因为您正在删除未分配的内存.您通过"new"分配6个字节,但随后将var"mystr"重新分配给一个完全不同的指针(静态字符串"Hello"),该指针未由"new"分配.因此,您尝试"删除"首先未由您分配的静态字符串"Hello".这是修复:
改变这些行:
char * mystr = new char[6];
mystr = "Hello";
Run Code Online (Sandbox Code Playgroud)
对此:
char * mystr = new char[6];
strcpy(mystr, "Hello");
Run Code Online (Sandbox Code Playgroud)
或者,你可以让"foo"只是" 返回"你好"; "而不是删除main中的字符串.
归档时间: |
|
查看次数: |
766 次 |
最近记录: |