看板 C_and_CPP 關於我們 聯絡資訊
我本來打算實作一個 struct link, node是我自訂的struct ptrNodeFront 是開頭,照理說只會被assign一次才對 結果每次只要宣告新的 node, ptrNodeFront就會立刻被蓋掉 實在是想不通怎麼會這樣? //全域宣告 struct node { char* strKeyin; struct node* next; //指向同類struct的指標 }; node *ptrNodeFront; //全域宣告結束 while(1) { char *strKeyin = new char[20]; //供輸入暫存 int nNumOfKeyinChar=0; static int nNumOfNode=0; printf("請輸入字串或命令"); scanf("%s",strKeyin); //檢查使用者這次輸入幾個字? 不可檢查到超過20 while(strKeyin[nNumOfKeyinChar]!='\0' && nNumOfKeyinChar<20) { nNumOfKeyinChar++; } /*這行會蓋掉*/ node StrNode ; //生命週期只在while迴圈內 nNumOfNode++; StrNode.strKeyin = new char[nNumOfKeyinChar]; //宣告等於這次輸入長度的字串 StrNode.strKeyin = strKeyin; if(1==nNumOfNode) ptrNodeFront = &StrNode; else if(2==nNumOfNode) (*ptrNodeFront).next = &StrNode; else if(3==nNumOfNode) (*(*ptrNodeFront).next).next = &StrNode; //delete strKeyin; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.165.23
LPH66:因為你的東西實質上是在 StrNode 裡 09/29 06:55
LPH66:那個變數的內容過了一個 while 迴圈就不見了 09/29 06:55
LPH66:而同樣的位置在第二次之後的迴圈就被重新利用為新的 StrNode 09/29 06:55
LPH66:因此你以為每一圈不同的變數實際上都在同一個地方 09/29 06:56
LPH66:正確的寫法是鏈結串列裡的每一個節點都要 new 一個出來 09/29 06:56
LPH66:所以這裡並不是蓋掉全域變數而是幫你回收再利用了你不知道 09/29 06:57