作者neville123 (nk)
看板C_and_CPP
標題Re: [問題] 記憶體錯誤
時間Mon Apr 6 22:01:07 2009
剛剛作了一點測試
下面這個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