作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 關於堆疊的問題
時間Mon Oct 18 19:05:17 2010
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)
推 tomap41017:用template不是很好嗎(大誤) 10/18 20:14
推 joefaq:用STL不是更好嗎 (無誤) 10/18 20:36
推 rg550:謝謝你 原來問題是在str 我後來將每次str都換不同位址 10/18 21:53
→ rg550:有成功解決問題! 謝謝~! 10/18 21:53