我在将数字连接到char数组末尾的函数时遇到问题。老实说,我看不到这个问题:

void x(int num, char* originalArray) {

    char* concat_str = new char[1];
    sprintf(concat_str, "%d", num);

    for (int i = 0; i < 1; i++)
        originalArray[i + 10] = concat_str[i];

    delete [] concat_str;
   }


错误消息是:


  已检测到堆损坏:在正常块(#147)之后的0x01204CA0处。 CRT检测到应用程序在堆缓冲区结束后写入了内存。


有任何想法吗?我是一个初学者,但是我已经做过很多次相同的事情,并且从未遇到过这个问题。谢谢。

最佳答案

concat_str必须足够大以容纳num中的位数,再加上一个空终止符。由于它的大小为1,因此您只有足够的空间容纳空终止符。尝试添加其他任何内容都是未定义的行为,因为它访问您不拥有的内存并导致堆损坏。

关于c++ - 释放动态内存时,Visual Studio中出现堆损坏错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35093363/

10-10 17:47