gpt4 book ai didi

c - 当我尝试释放使用 malloc 分配的字符指针时,为什么会出现核心转储?

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:43 27 4
gpt4 key购买 nike

我正在努力学习 C 语言的基础知识,但我无法让 malloc()free() 正常工作。

这是我的代码,它将根据输入在屏幕中央打印一个单词。 (删除了一些声明并包括以缩短它)

char *bridge_text;
char menu1[] = "Key input: \n\t n. car arrive north \
\n\t s. car arrive south \
\n\t r. empty bridge \
\n\t q. quit";
int main()
{
bridge_text = malloc(sizeof(char)*(LEN+1)); //misprinted here before

initscr();
getmaxyx(stdscr,row, col);

mvprintw(2, 4, menu1);
refresh();
while(run)
{
switch(getchar())
{
case 'q':
run = 0;
break;
case 'n':
/*not shown: char north[] = "NORTH";*/
bridge_text = north;
break;
case 's':
bridge_text = south;
break;
case 'r':
bridge_text = empty;
break;
default:
bridge_text = empty;
break;
}

mvprintw(row/2, (col-5)/2, bridge_text);
refresh();
}
endwin();

/* adding free() here results in core dump. */
free(bridge_text);

return 0;}

我将 gcc 与 cygwin 一起使用,程序正确执行,我可以使用“q”键退出程序,但是...

  • 如果先按 'n''e''r'(分配给 bridge_text 一个字符串) 和然后尝试退出,它会导致核心转储。如果我这样做很好移除 free()

我在用 cygwin 运行可执行文件时确实有一个错误:*

fatal error MapViewOfFileEx shared 5'(0x66) Win 32 error 6.

也许这就是问题所在,但我认为这与此无关。

最佳答案

问题

  1. sizeof(LEN+1) 将评估为整数的大小
  2. 分配字符串时动态分配的内存丢失

改变

bridge_text = malloc(sizeof(LEN+1));

bridge_text = malloc(LEN + 1);

而不是分配 bridge_text = north,使用 strcpy

strcpy(bridge_text, north);

关于c - 当我尝试释放使用 malloc 分配的字符指针时,为什么会出现核心转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141844/

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