为什么我的字符串失去了它的价值?
问题描述:
出于某种原因,我的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
答
从您的评论:
这真的很难调试(这就是为什么我使用
printf
),因为我分叉并使用进程(这是我正在处理的VoIP项目的服务器),当我试图按照子进程运行时,gdb没有工作。
强调我的。
如果为toCheck
动态分配的内存从未真正将其分配到分叉进程或创建它,但不知何故被丢弃/覆盖,我不会感到惊讶。
新信息:如果我注释掉
getLine(list, temp);
那么它不会擦除toCheck
,有什么想法?
这是您的程序中第一次需要std::allocator
来实际分配内存。
的STL从未developped在考虑分叉,所以完全有可能比它只是在这个用例不起作用。
您可以使用调试器检查发生了什么。查看toCheck
的内存分配在哪个地址,以及为temp
分配内存时发生了什么,但这是深度潜水。
因为你似乎有gdb的问题,你可以尝试先转储地址(printf("%x", &toCheck[0]);
)。
list.txt的内容是什么? – JohnFx 2012-04-23 23:21:21
你必须通过“list.txt”引导一些黑暗魔法。 – ScarletAmaranth 2012-04-23 23:22:21
删除list.txt,并且只是在某些虚拟值中使用了temp,您的代码在我的MacbookPro上可以正常工作。 – Alan 2012-04-23 23:26:48