删除指针会导致堆损坏
Deleting pointer causes heap corruption
谁能解释一下为什么这段代码会导致堆损坏?
string someText = "hello hello";
char **arrayOfCharPtr = new char*[5];
arrayOfCharPtr[0] = new char[someText.length()];
strcpy(arrayOfCharPtr[0], someText.c_str());
delete[] arrayOfCharPtr[0];
非常感谢!
您需要分配比字符串长度多一个字符来存储最后一个' '字符。
arrayOfCharPtr[0] = new char[someText.length()+1];
在你的例子中,strcpy会在分配的块之后写最后一个' ',这会破坏堆。
像valgrind这样的工具可以帮助理解。Valgrind产生错误消息==16970== Invalid write of size 1
==16970== at 0x4C3106F: strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16970== by 0x400C47: main
==16970== Address 0x5ab5cfb is 0 bytes after a block of size 11 alloc'd
==16970== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16970== by 0x400C1C: main
相关文章:
- 堆损坏 c++ 返回表指针的函数
- C++指针:数组的堆栈已损坏
- 当使用实例会员方法作为函数指针时,堆积损坏
- 字符指针指向字符串,然后指向字符串数组。"./a.out"中的错误:malloc():内存损坏:0x0900c3b0***
- 指针函数参数已损坏,堆栈已损坏
- 损坏的指针-BST-调试
- 从函数返回时指针已损坏
- 通过 std::vector.data() 指向 std::vector 元素的指针指向损坏的数据
- C++指针损坏
- 删除数组指针C++时堆损坏
- 调用 C++ 成员函数指针:此指针已损坏
- 如果 EBP 帧指针为 NULL,堆栈是否损坏
- P/Invoke:指针内存损坏
- 从函数-堆损坏返回的void*指针
- 用错误的“”调用构造函数;这个“;指针.这是堆栈损坏吗
- 共享指针的双自由度或损坏
- 奇怪的指针损坏错误
- "this"指针在堆栈跟踪中损坏
- 删除指针会导致堆损坏
- 数组数据在传递指针C后损坏