【问题标题】:Segmentation fault:core Dumped while using mvscanw function of ncurses in c on ubuntu分段错误:在 ubuntu 上使用 c 中 ncurses 的 mvscanw 函数时核心转储
【发布时间】:2013-09-05 05:44:55
【问题描述】:

我正在尝试从键盘读取输入字符串并将其显示在 ncurses 的新窗口中。 接收到的字符串被传递给函数 display。 这个函数有一个链接列表。 将该字符串与此链接列表结构的元素从列表顶部到末尾进行比较。 如果找到匹配,它会打印那些特定的列表元素,如果没有,它就会出来。

代码如下:

void main()
{
 char *str=(char*)malloc(10*sizeof(char));
 mvprintw (1,0, "%s","ivrcode:");
 mvscanw(1,8,"%s",str);
 mvprintw (1,8, "%s",str); 
 initscr ();
 cbreak();
 curs_set (2);
 clear();
 display1(str);
 refresh();


}


void display1(char *r)
{ char * status;
int   thisDTMF;
struct linklist * curser=listhead;
int count;
mvprintw (2,0, "%s","vId");
mvprintw (2,10, "%s","msisdn" );
mvprintw (2,25, "%s","ivrCode" );
mvprintw (2,35, "%s","state" );
mvprintw (2,45, "%s","DTMF" );
count = 4;
while(curser!=NULL)
{ status=getState(curser->state);
  thisDTMF=getDTMF(curser->dtmf);
  if(curser->ivrCode==r)
  { mvprintw (count,0,"%d",curser->vId);
  mvprintw (count,10,"%s",curser->msisdn);
  mvprintw (count,25, "%s",curser->ivrCode );
  mvprintw (count,35, "%s",status );
  if(thisDTMF==35||thisDTMF==42)
      mvprintw (count,45, "%c",thisDTMF );
  else
  mvprintw (count,45, "%d",thisDTMF );
  count++;
  }

      curser=curser->next;
}

 }

它也从键盘获取输入字符串并打印。
编译成功。
但是当我按 Enter 时,它什么也没有显示。
有什么建议吗?

【问题讨论】:

  • 不要为char *str;分配内存
  • 我没有为 char * str 分配任何内存
  • @user2720337 我认为他的意思是您不分配..即您需要分配
  • 我想这就是@Grijesh 想说的——你需要str分配内存。
  • 使用gcc -Wall -g编译代码。改进它直到你没有收到警告。了解如何使用gdb 调试器。

标签: c linux segmentation-fault ncurses


【解决方案1】:
void main()
{
   char *str; <--- Declaration
   mvprintw (1,0, "%s","ivrcode:");
   mvscanw(1,8,"%s",str);
   mvprintw (1,8, "%s",str); <--- Used without initialzation
   ...
 }

在这里,您声明了指针str,但您没有对其进行初始化或为其分配任何值。然后你已经使用了它,所以它是未定义的行为。如果您说it worked well,那么这就是未定义的行为。它看起来可以工作,它可能会崩溃,产生错误的输出,无论如何......

如果你没有正确分配它,你期望它的输出是什么?

【讨论】:

  • 但它没有从链接列表打印,虽然我已经输入了链接列表中的字符串,所以curser->ivrCode 应该与字符串匹配并打印。
  • 由于您没有发布相关代码,因此没有人可以说它应该做什么或不应该做什么。如果您对某些代码有问题,您应该发布一个 SSCE,否则您会错过一些您可能认为不相关但实际上并不相关的部分。
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多