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

Why is my string losing its value?

本文关键字:失去 我的 字符串 为什么      更新时间:2023-10-16
由于

某种原因,我的toCheck变量的值被删除了,我不知道为什么。 有什么建议吗?

bool
check(string toCheck){
    printf("toCheck: %sn", 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 existsn");
            return false;
        }
    }
    printf("returning truen");
    return true;
}

以下是它正在通过的内容: TestTrevor

这是输出:

toCheck: TestTrevor  
toCheck: '' temp: 'Trevor'  
toCheck: '' temp: ''  
Username exists

从您的评论中:

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

强调我的。

如果动态分配给toCheck的内存从未真正进入分叉进程,或者制作它但不知何故被丢弃/覆盖,我不会感到惊讶。

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

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


STL 在开发时从未考虑过分叉,因此完全有可能,而不是在这个用例中根本不起作用

您可以检查调试器的情况。查看在哪个地址分配toCheck的内存以及为temp分配内存时会发生什么,但这是深入探讨。

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