为什么我的字符串失去了它的价值?

问题描述:

出于某种原因,我的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

从您的评论:

这真的很难调试(这就是为什么我使用printf),因为我分叉并使用进程(这是我正在处理的VoIP项目的服务器),当我试图按照子进程运行时,gdb没有工作。

强调我的。

如果为toCheck动态分配的内存从未真正将其分配到分叉进程或创建它,但不知何故被丢弃/覆盖,我不会感到惊讶。

新信息:如果我注释掉getLine(list, temp);那么它不会擦除toCheck,有什么想法?

这是您的程序中第一次需要std::allocator来实际分配内存。


的STL从未developped在考虑分叉,所以完全有可能比它只是在这个用例不起作用

您可以使用调试器检查发生了什么。查看toCheck的内存分配在哪个地址,以及为temp分配内存时发生了什么,但这是深度潜水。

因为你似乎有gdb的问题,你可以尝试先转储地址(printf("%x", &toCheck[0]);)。