我迷路了。我无法将 int
分配给取消引用的 int *
。
printf("in octave\n");
int *default_octave;
printf("attr[%d]: %s\n",i+1,attr[i+1]);
const char *octave_char = attr[i+1];
printf("octave_char: %s\n", octave_char);
int octave_number = atoi(octave_char);
printf("octave_number: %d\n", octave_number);
fflush(stdout);
*default_octave=octave_number;
printf("in octave pt 2\n");
fflush(stdout);
这是输出:
in octave
attr[1]: 4
octave_char: 4
octave_number: 4
Segmentation fault
为什么?
运行 GDB 调试器会到达该行,然后也会出现段错误。
4
0 int octave_number = atoi(octave_char);
(gdb) s
41 printf("octave_number: %d\n", octave_number);
(gdb)
octave_number: 4
42 fflush(stdout);
(gdb)
43 *default_octave=octave_number;
(gdb) print octave_number
$1 = 4
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400a7b in parse_song (song_data=0x7fffffffe7a8, attr=0x602600) at nullaby.c:43
43 *default_octave=octave_number;
(gdb)
我不知道我能做些什么来解决这个问题。
最佳答案
它会出现段错误,因为您从未将 default_octave
初始化为指向任何可以存储 int
的对象。
关于无法将 int 分配给 C 中取消引用的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935462/