未分配被释放的Malloc指针
Malloc pointer being freed was not allocated
我用c++写了这个程序,它还没有完全完成,但我正在测试它,我一直得到这个错误Hyphen(36636,0x7fff7d65b300) malloc: *** error for object 0x10d31858e: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
,我不太确定该怎么做,我是c++新手,我知道我的代码不是最好的,但任何帮助都非常感谢。谢谢你。
这是一个主要问题:
char *tempCharArray = returnArray;
free(returnArray);
return tempCharArray;
你复制指针到tempCharArray
,释放指针指向的内存,然后返回指针。当使用指针时,它不再指向已分配的内存,你将有未定义的行为。
然后是这个:
char* goHyphen(const char* input) {
...
string *finWords = new string[numWords];
...
return (char*)finWords;
}
这真的是错了。特别是考虑到你如何使用它:
char* actual = goHyphen( input );
bool equal = strcmp( expected, actual ) == 0;
这是另一个主要问题,还有未定义行为。
你也做
delete actual;
这是另一个导致未定义行为的问题(您应该在这里使用delete[]
)。
顺便说一下,这可能是最后的delete
,导致你的问题(你真的需要学习如何使用调试器):你传递一个指向字符串文字的指针给goHyphen
函数,goHyphen
函数可能返回这个指针。然后你尝试delete
这个指针,即使你没有分配它(即当它指向字符串字面量时)。
你似乎太依赖指针了,别那么做了。使用std::vector
代替动态分配。你也可以将new[]
/delete[]
(以及在某些情况下new[]
和delete
)与malloc
/free
混合使用,不要这样做(如果你使用std::vector
,你不必这样做)。
这里有一个很好的经验法则:如果你需要做c风格的强制转换,这表明你在做一些你不应该做的事情。
另一个经验法则:如果你需要一个字符串使用std::string
实例(即对象),如果你需要一个"动态数组"使用std::vector
对象。
最后:尽可能远离指针。在现代c++中,几乎不需要多态性之外的指针。
你的代码
char *tempCharArray = returnArray;
free(returnArray);
return tempCharArray;
无论如何都要取tempCharArray并在
处将其转换为std::stringstd::string tempString(hyphenated);
你可以在函数中直接使用std::string而不是char array,并将其更改为
std:: string insertHyphenNorm(const char* word, int positionToInsertAt) {
那么你就不需要任何不必要的内存分配和删除
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 指针(指向指针)和新/malloc 向量(向量内部)c++
- 将 C 代码移植到C++,将 void* 从 malloc 转换为所需指针的问题
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- 如何在python中创建等效的结构并使用malloc更改空指针的引用
- Malloc,免费和多个指针,它是如何工作的
- malloc - 运行时内存指针类型分配
- 使用malloc和指针替换矩阵中的向量
- Malloc,指针和变量
- 是否有理由使用 malloc 初始化构造函数中的指针
- 将指针数组传递给数组,以便在 malloc() 发生的位置发挥作用
- malloc: 对象 0x00 的 *** 错误:未分配正在释放的指针
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- malloc: 对象 0x10003b3c4 的 *** 错误:未分配正在释放的指针 *** 在malloc_error
- 带有QT的C 应用中的IIMEBRA代码给出malloc:***对象XXXXXX的错误:未分配释放的指针
- 字符指针指向字符串,然后指向字符串数组。"./a.out"中的错误:malloc():内存损坏:0x0900c3b0***
- 如何使用malloc通过基类的指针为派生类的对象分配内存
- 队列实现出现Malloc指针错误
- 为什么在这里返回一个 malloc'd 指针会导致免费"HEAP CORRUPTION"?
- 未分配被释放的Malloc指针