我迷路了。我無法將int
分配給取消引用int *
。無法將int分配給C中的取消引用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調試器獲取到該行,然後賽格故障了。
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)
我不知道我能做些什麼來解決這個問題。
謝謝你給我一個指針頓悟。一切都很有意義,關於指針,堆棧和堆...... – twmb 2012-03-30 00:37:52
當然......)但是在這裏,沒有首選的方式......這一切都取決於操作系統試圖實現什麼......作爲一個指針可以指向任何東西,它可以指向堆棧地址或堆地址...只需要指向一個有效的地址,如果你想解除引用它... – Macmade 2012-03-30 00:39:10
一個沒有問題的投票計數,只要他得到他需要的答案...:) – Macmade 2012-03-30 00:39:54