gpt4 book ai didi

c - 被释放的指针未在 C 中分配

转载 作者:行者123 更新时间:2023-11-30 20:45:52 25 4
gpt4 key购买 nike

不确定下面的代码有什么问题以及为什么它给我错误“正在释放的指针未分配”。使用 clang。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static char * messagePtr;

int main()
{

messagePtr = (char *)malloc(sizeof(char) * 800);
if(messagePtr == NULL) {
printf("Bad malloc error\n");
exit(1);
}


// //gameLoop();
char outputMessage[50] = "";
messagePtr = outputMessage;

free(messagePtr);
messagePtr = NULL;

return 0;
}

最佳答案

您将 outputMessage(它是一个数组,并转换为指向数组第一个元素的指针)分配给 messagePtr,因此 messagePtr > 不再指向通过 malloc() 或其系列分配的内容。

传递非 NULL 且未通过 malloc() 等内存管理函数分配的内容会调用未定义的行为。 ( N1570 7.22.3.3 免费功能)

请注意,他们说 you shouldn't cast the result of malloc() in C .

您的一些选择是:

1.停止使用 malloc() 来分配将被丢弃的缓冲区。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static char * messagePtr;

int main()
{

// //gameLoop();
char outputMessage[50] = "";
messagePtr = outputMessage;

messagePtr = NULL;

return 0;
}

2. 丢弃缓冲区之前释放它。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static char * messagePtr;

int main()
{

messagePtr = malloc(sizeof(char) * 800);
if(messagePtr == NULL) {
printf("Bad malloc error\n");
exit(1);
}


// //gameLoop();
free(messagePtr);
char outputMessage[50] = "";
messagePtr = outputMessage;

messagePtr = NULL;

return 0;
}

3.使用strcpy()复制字符串。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static char * messagePtr;

int main()
{

messagePtr = malloc(sizeof(char) * 800);
if(messagePtr == NULL) {
printf("Bad malloc error\n");
exit(1);
}


// //gameLoop();
char outputMessage[50] = "";
strcpy(messagePtr, outputMessage);

free(messagePtr);
messagePtr = NULL;

return 0;
}

关于c - 被释放的指针未在 C 中分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540414/

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