看板 C_and_CPP 關於我們 聯絡資訊
剛剛作了一點測試 下面這個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
xrancyma:就跟你講改成 **ptr[top]=good; 還在那邊囉唆… 04/06 22:02
neville123:sorry 我剛剛沒看到推文@@ 04/06 22:03
xrancyma:疑?ptr 宣告又換啦?…換來換去的…很難講解耶。 04/06 22:03
neville123:宣告方式沒有改阿@@ 04/06 22:05
xrancyma:抱歉,是改成 (*ptr)[top] = item 才對。 04/06 22:09
neville123:謝謝 沒有注意到operator 的次序 04/06 22:11
windincloud:這樣寫 free(ptr); free(queue); 會不會有問題呀? 04/06 22:57