gpt4 book ai didi

c++ - 为什么我得到 'Heap Corruption' ?

转载 作者:太空狗 更新时间:2023-10-29 23:38:03 27 4
gpt4 key购买 nike

请不要为了这个把我钉在十字架上。我决定使用 char* 可能更好,因为我打算构建的字符串的大小已知。我还知道,如果 timeinfo->tm_hour 返回的不是 2 位数字,那么事情就会变得很糟糕。就是说,当此函数返回时,VIsual Studio 就 HEAP CORRUPTION 向我大发雷霆。出了什么问题? (另外,我应该只使用 stringbuilder 吗?)

void cLogger::_writelogmessage(std::string Message)
{
time_t rawtime;
struct tm* timeinfo = 0;

time(&rawtime);
timeinfo = localtime(&rawtime);

char* MessageBuffer = new char[Message.length()+11];
char* msgptr = MessageBuffer;

_itoa(timeinfo->tm_hour, msgptr, 10);
msgptr+=2;

strcpy(msgptr, "::");
msgptr+=2;

_itoa(timeinfo->tm_min, msgptr, 10);
msgptr+=2;

strcpy(msgptr, "::");
msgptr+=2;

_itoa(timeinfo->tm_sec, msgptr, 10);
msgptr+=2;

strcpy(msgptr, " ");
msgptr+=1;

strcpy(msgptr, Message.c_str());

_file << MessageBuffer;

delete[] MessageBuffer;
}

最佳答案

您需要再分配一个字节,因为 string.length 返回其长度而没有终止 NUL,为此您还需要在 中留出空间字符*

即假设 Message.length() 返回 10。您分配了 21 个字节。将 11 个字节复制到缓冲区中,然后复制消息,这需要 10 个字节 + 一个用于 NUL。总计:22 个字节,而您只分配了 21 个。

关于c++ - 为什么我得到 'Heap Corruption' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2665931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com