English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

下面這各程式會當機,是否有大大
可以幫忙抓出是哪邊有問題謝謝!!
程式:
struct nodes
{
char c;
struct nodes *next;
};
typedef struct nodes d_n;
int m_f(void){
d_n *top = NULL;
d_n *now;
d_n *tmp;
char *a;
int i=0;
int r,b;

a = (char*)malloc(sizeof(char)*4);
scanf("%s",&a);
////////////////////////////////////////////////////////////////////////
for(i=0;a[i]!='\0';i++){
now =(d_n*) malloc(sizeof(d_n)*4); 這邊都會當機.
now->c = a[i];
///////////////////////////////////////////////////////////////////////
now->next = top;
top = now;

r = (int)(top->c-48);
return r;
}

2007-02-09 10:29:10 · 3 個解答 · 發問者 jeff 1 in 電腦與網際網路 程式設計

3 個解答

如果在top = now;以下r = (int)(top->c-48);以上有個}且你迴圈裡是寫a[i]!='\\0'的話.你的程式個人認為有3個小錯誤.
1. 你的程式當機的地方應是在迴圈上而不是在malloc()上.錯的地方是
scanf("%s",&a);
因a已是個字串變數了.在用scanf()讀字串時你不用傳進字串變數的住址.只要傳入字串變數就行了.
2. 再來就是你的a是個有4個字元的字串.所以最後的’\\0’不算的話使用者最多只能輸入3個字元.不然可能會在scanf()裡出錯.或malloc()因已要太多記憶體了所以回傳0,而在new->c = a[i];這裡出錯.
3. 你在用malloc()要d_n的記憶體時為何用sizeof(d_n)*4?你只要一個d_n就夠了啊.
懂不懂?不懂請再問.

2007-02-10 04:31:55 · answer #1 · answered by 7 · 0 0

m_f 編碼好像不完整

要想快速抓到執行時的問題,最好多學習Debugger工具
Debugger 可以用來檢查執行時的路徑(Tracing)及變數值

2007-02-09 20:53:17 · answer #2 · answered by OriginRain 4 · 0 0

假設這行配置記憶體的程式碼沒有問題
now =(d_n*) malloc(sizeof(d_n)*4);
那麼就是迴圈的條件寫錯了
字串後面的字元是「結束字元」
for ( i = 0 ; a [ i ] ! = ' \0 ' ; i + + )

2007-02-09 17:02:38 補充:
因為奇摩的排版問題再重貼一次

for ( i = 0 ; a [ i ] ! = ' \\0 ' ; i )

2007-02-09 12:00:12 · answer #3 · answered by Big_John-tw 7 · 0 0

fedest.com, questions and answers