Re: [問題] 關於堆疊的問題

看板C_and_CPP (C/C++)作者 (好人超)時間15年前 (2010/10/18 19:05), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串2/2 (看更多)
int stackPush(struct stackTag *stack, void *dataptr) { struct stackNodeTag *newptr; newptr = (struct stackNodeTag *)malloc(sizeof(struct stackNodeTag)); if (newptr == NULL) return 0; newptr->dataptr = dataptr; newptr->link = stack->top; stack->top = newptr; (stack->count)++; return 1; } int main() { char str[512]; struct stackTag *stack; while(fgets(buf,512,stdin)!=NULL) { while(buf[i]!='\0') { stackPush(stack, str); } } 找到一個相當明顯的問題 每一個 newptr, 它的 dataptr 全部都是指向 main 的 str 陣列 在最後一次跑完,str 裡的資料是什麼,stack 裡就通通是什麼 因此才會出現「最後印出來的東西都一樣」,你印的都是 main 裡面 str[] 的內容啊 要避免這個問題,可以在 stackPush 裡面多加一個複製的動作 newptr->dataptr = dataptr; 這行修改成 newptr->dataptr = malloc(strlen(dataptr)); //或者想辦法取得dataptr的長度 strcpy(newptr->dataptr, dataptr); -- 題外話,我想原po是想要一般化、泛用化,才使用 void * 來存資料 不過在基本款還沒完成之前,覺得 void * 好像只是給自己找麻煩...XD -- 另外,我還是要宣導一下,請善用 debugger 工具 http://james803.pixnet.net/blog/post/17991240 不過 Dev-C++ 的要怎麼用,就要靠原 po 自己研究了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (10/18 19:07)

10/18 20:14, , 1F
用template不是很好嗎(大誤)
10/18 20:14, 1F

10/18 20:36, , 2F
用STL不是更好嗎 (無誤)
10/18 20:36, 2F

10/18 20:39, , 3F
http://ppt.cc/U(DZ ADT 的藝術XD
10/18 20:39, 3F

10/18 21:53, , 4F
謝謝你 原來問題是在str 我後來將每次str都換不同位址
10/18 21:53, 4F

10/18 21:53, , 5F
有成功解決問題! 謝謝~!
10/18 21:53, 5F
文章代碼(AID): #1Cl2dlZW (C_and_CPP)
文章代碼(AID): #1Cl2dlZW (C_and_CPP)