2012-04-23 49 views
6

出於某種原因,我的toCheck變量的值正在被擦除,我不知道爲什麼。有什麼建議麼?爲什麼我的字符串失去了它的價值?

bool 
check(string toCheck){ 
    printf("toCheck: %s\n", toCheck.c_str()); 
    ifstream list; 
    list.open("list.txt"); 
    string temp; 
    while(list){ 
     getline(list,temp); 
     printf("toCheck: '%s' temp: '%s'\n",toCheck.c_str(), temp.c_str()); 
     if(temp == toCheck){ 
      printf("Username exists\n"); 
      return false; 
     } 
    } 
    printf("returning true\n"); 
    return true; 
} 

這就是它被傳遞:TestTrevor

而這裏的輸出:

toCheck: TestTrevor 
toCheck: '' temp: 'Trevor' 
toCheck: '' temp: '' 

Username exists 
+1

list.txt的內容是什麼? – JohnFx 2012-04-23 23:21:21

+0

你必須通過「list.txt」引導一些黑暗魔法。 – ScarletAmaranth 2012-04-23 23:22:21

+0

刪除list.txt,並且只是在某些虛擬值中使用了temp,您的代碼在我的MacbookPro上可以正常工作。 – Alan 2012-04-23 23:26:48

回答

4

從您的評論:

這真的很難調試(這就是爲什麼我使用printf),因爲我分叉並使用進程(這是我正在處理的VoIP項目的服務器),當我試圖按照子進程運行時,gdb沒有工作。

強調我的。

如果爲toCheck動態分配的內存從未真正將其分配到分叉進程或創建它,但不知何故被丟棄/覆蓋,我不會感到驚訝。

新信息:如果我註釋掉getLine(list, temp);那麼它不會擦除toCheck,有什麼想法?

這是您的程序中第一次需要std::allocator來實際分配內存。


的STL從未developped在考慮分叉,所以完全有可能比它只是在這個用例不起作用

您可以使用調試器檢查發生了什麼。查看toCheck的內存分配在哪個地址,以及爲temp分配內存時發生了什麼,但這是深度潛水。

因爲你似乎有gdb的問題,你可以嘗試先轉儲地址(printf("%x", &toCheck[0]);)。

相關問題