Re: [問題] 記憶體錯誤(已解決)

看板C_and_CPP作者 (nk)時間15年前 (2009/04/06 22:01), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串2/2 (看更多)
剛剛作了一點測試 下面這個code我測試出來的結果 (只有兩個element) 就是fscanf可以寫到queue裡面 但是push 卻只能 push 第一個 element 到 ptr ptr[0] 可以順利output ptr[1] 卻只印出 0 0 0 0 0 可是卻沒有發生記憶體的錯誤@@ #include <stdio.h> #include <stdlib.h> #include <math.h> struct item{ int time; int index; int From_stair; int To_stair; int weight; };//item int top = -1; void push (struct item **ptr, struct item good){ top = top + 1; printf ("\ntop = %d\n",top); *ptr[top] = good ; } int main(){ struct item *ptr , *queue; FILE* fp; fp = fopen ("input2.txt","r"); ptr = (struct item*) malloc(sizeof(struct item)*1024); queue = (struct item*) malloc(sizeof(struct item)*1024); for (int i=0; i<2; i++){ fscanf (fp, "%d %d %d", &queue[i].time, &queue[i].index, &queue[i].weight); fscanf (fp, "%d %d", &queue[i].From_stair, &queue[i].To_stair); printf ("%d %d %d ", queue[i].time, queue[i].index, queue[i].weight); printf ("%d %d", queue[i].From_stair, queue[i].To_stair); push (&ptr, queue[i]); } printf ("\n\n"); for (int i=0; i<2; i++){ printf ("%d %d %d ", ptr[i].time, ptr[i].index, ptr[i].weight); printf ("%d %d", ptr[i].From_stair, ptr[i].To_stair); printf ("\n"); } system("pause"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.215.109

04/06 22:02, , 1F
就跟你講改成 **ptr[top]=good; 還在那邊囉唆…
04/06 22:02, 1F

04/06 22:03, , 2F
sorry 我剛剛沒看到推文@@
04/06 22:03, 2F

04/06 22:03, , 3F
疑?ptr 宣告又換啦?…換來換去的…很難講解耶。
04/06 22:03, 3F

04/06 22:05, , 4F
宣告方式沒有改阿@@
04/06 22:05, 4F

04/06 22:09, , 5F
抱歉,是改成 (*ptr)[top] = item 才對。
04/06 22:09, 5F

04/06 22:11, , 6F
謝謝 沒有注意到operator 的次序
04/06 22:11, 6F

04/06 22:57, , 7F
這樣寫 free(ptr); free(queue); 會不會有問題呀?
04/06 22:57, 7F
文章代碼(AID): #19sWiavA (C_and_CPP)
文章代碼(AID): #19sWiavA (C_and_CPP)