为什么我的弦失去了它的价值?

时间:2012-04-23 23:15:50

标签: c++ string compare

由于某种原因,我的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 个答案:

答案 0 :(得分:4)

来自您的评论:

  

调试真的很难(这就是我使用printf的原因),因为我正在分析并使用进程(这是我正在工作的VoIP项目的服务器当我试图遵循子进程时,gdb没有工作。

强调我的。

如果为toCheck动态分配的内存从未真正进入分叉进程,或者以某种方式被丢弃/覆盖,我不会感到惊讶。

  

新信息:如果我发表评论getLine(list, temp);,那么它不会删除toCheck,有什么想法吗?

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


STL从来没有考虑过分叉,所以它完全可能只是在这个用例中不起作用

您可以查看调试器发生了什么。查看分配toCheck内存的地址以及为temp分配内存时会发生什么,但这是深潜。

由于您似乎遇到了gdb问题,您可以先尝试转储地址(printf("%x", &toCheck[0]);)。