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
4

1 回答 1

4

从您的评论中:

调试起来真的很困难(这就是我使用 的原因printf),因为我正在分叉和使用进程(这是我正在处理的 VoIP 项目的服务器)并且当我尝试遵循时 gdb 不工作子进程。

强调我的。

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

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

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


STL 的开发从未考虑过分叉,因此它完全有可能在这个用例中不起作用

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

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

于 2012-04-24T07:17:11.547 回答