C语言 来自 /usr/lib/system/libsystem_platform.dylib 的 Segfault (



我正在运行以下C代码。

void manual_enter(int * state_count, char * states, char * alphabet, char * start_state, char * accept_states) {
   int counter;
   printf("Please enter the number of states in the DFA. ");
   scanf("%d", state_count);
   states = (char *) malloc(sizeof(char) * (*state_count) );
   printf("n!");
   counter = 0;
   for(counter = 0; counter < *state_count; counter++) {
      printf("n!");
      printf("nPlease enter state: %d", counter);
      scanf("%c", states[counter]);
      printf("%c", states[counter]);
   }
   return;
}

我在第二个感叹号之后但在提示输入给定状态号之前收到段错误。我在 gdb 中运行以获取回溯,这就是我得到的:

 (gdb) bt
 #0  0x00007fff8b313fda in ?? () from /usr/lib/system/libsystem_platform.dylib
 #1  0x00007fff5fbff360 in ?? ()
 #2  0x00007fff88db1fbb in __fread () from /usr/lib/system/libsystem_c.dylib
 Backtrace stopped: frame did not save the PC

是一个编程新手,所以很可能我正在接近这个调试,这一切都是错误的。有关如何解决此问题的任何帮助或提示将不胜感激。谢谢!

对应于scanf()%c的参数必须是指针:

  scanf(" %c", &states[counter]);

您应该已经收到有关此的编译器警告。

您还应该在%c之前放置一个空格,以便在读取字符之前跳过空格。否则,每隔state将包含一个换行符。

我想知道为什么当函数将其作为参数接收时,您为什么要分配states。如果函数应该分配states数组本身并将其返回给调用方(就像它对 char **states' 所做的state_count), the argument should be一样。然后你会做:

*states = malloc(sizeof(char) * (*state_count));

函数中对states的所有其他引用也需要更改为 *states

相关内容

  • 没有找到相关文章

最新更新