Re: [問題] 關於堆疊的問題
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
10/18 20:14, 1F
推
10/18 20:36, , 2F
10/18 20:36, 2F
→
10/18 20:39, , 3F
10/18 20:39, 3F
推
10/18 21:53, , 4F
10/18 21:53, 4F
→
10/18 21:53, , 5F
10/18 21:53, 5F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章