gpt4 book ai didi

c - 检测到堆损坏 : after Normal block

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

“CRT 检测到应用程序写入了堆缓冲区的内存末尾”错误。它在到达 free 时崩溃。感谢您的帮助。

int messageFunction(char* message) {
char* sPtr = strstr(message,"Subject:");
char* cPtr = strstr(message,"Content:");

char* messageSubject = (char*) malloc(cPtr - sPtr - strlen("Subject:"))
char* messageContent = (char*) malloc(strlen(cPtr + strlen("Content:")))

strncpy(messageSubject,
stPtr + strlen("Subject:"),
cPtr - sPtr - strlen("Subject:"));

messageSubject[cPtr - sPtr - strlen("Subject:")] = '\0';

strncpy(messageContent,
cPtr + strlen("Content:"),
strlen(cPtr + strlen("Content:")));
...
free(messageSubject);
free(messageContent);
}


void main() {
char* message = "Subject:HelloWorldContent:MessageContent";
int result = messageFunction(message);
}

最佳答案

您分配的内存太短了一个字节。您的计算是针对例如之间的数据长度。 “主题:”和“内容:”但不考虑字符串中需要空终止符。然后,当您手动添加空终止符时,您将通过写入数组末尾来调用未定义的行为。

将您的代码更改为以下内容应该可以解决此问题。

char* messageSubject = malloc(cPtr - sPtr - strlen("Subject:") + 1)
char* messageContent = malloc(strlen(cPtr + strlen("Content:")) + 1)

您也没有在“...”部分中显示代码,因此您可能在那里有一个未终止的字符串,如果它正在被字符串库例程处理可能会导致问题。

关于c - 检测到堆损坏 : after Normal block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203604/

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