看板 C_and_CPP 關於我們 聯絡資訊
tree_ptr tree(FILE *input) { int data; if(fscanf(input, "%d", &data)!=EOF) { if(data!=-1) { tree_ptr n_node; n_node =(tree_ptr)malloc(sizeof(tree_ptr)); n_node->lchild = NULL; n_node->rchild = NULL; n_node->data = data; n_node->lchild = tree(input); n_node->rchild = tree(input); return n_node; } else return NULL; } } int main() { int x[60]={0}; int i=0; FILE *input; input=fopen("input.txt", "r" ); tree_ptr root; system("pause"); root = tree(input); /*執行完後system("pause")就失去作用了*/ printf("%d\n",root->data); printf("%d\n", root->lchild->rchild->data); system("pause"); } ==== 因為我想看看做出來的tree是不是正確 就稍微測試了一下 基本上是有建立出來 而且正確 但是不知道為什麼system("pause")在call完function後就停不下來了 用Devcpp的debug模式卻完全正常...可以請問一下這怎麼了嗎? 謝謝~! orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.36.136
VictorTom:通常這可能是有記憶體存取錯誤, 所以debug build可能看 04/16 11:53
VictorTom:不出來, release build一經過optimization, 就一堆狀況 04/16 11:54
VictorTom:了; 第二次pause執行不到, 可能就是中間call stack爛了 04/16 11:54
keterwang:但是debug他printf那兩行有做出來 那root會有錯嗎 謝謝~ 04/16 11:55
VictorTom:如果release的printf沒出來那還是有機會, 因為release 04/16 12:36
VictorTom:build可能會把data/instruction reorder, 所以有些問題 04/16 12:36
VictorTom:debug一時沒測出來, 到了release build時就可能會掛掉 04/16 12:37
VictorTom:小弟之前就遇到該傳DWORD的只給它BYTE的空間去寫, debug 04/16 12:38
VictorTom:版都正常, release版call stack就被我這樣給弄爛掉了Orz 04/16 12:38
VictorTom:請問~~tree_ptr是一個pointer吧?? 您malloc時只配給它 04/16 12:43
VictorTom:sizeof(tree_ptr)的空間, 32bit環境下也就只有4 bytes啊 04/16 12:43
VictorTom:是不是應該malloc tree_node(假)完整的size出來才對啊?? 04/16 12:44
keterwang:恩恩 這點我也有想過..但是看老師給的範例是這樣alloc 04/16 13:36
keterwang:就沒再多想了XD 我試試看給他NODE的大小try看 大感謝~ 04/16 13:37
keterwang:謝謝你~ 換了編譯環境就不給過了!! 是segament的問題沒 04/16 13:39
keterwang:錯 是我看錯老師給的範例了orz 我真蠢 真的感謝~!! 04/16 13:41