作者deo2000 (800IM)
看板C_and_CPP
標題[問題] new local的東西會蓋掉global point
時間Sun Sep 29 04:44:31 2013
我本來打算實作一個 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