循环的c++不能正常工作
c++ for loop not working properly
此代码仅在我取消注释时有效
//else return "null";
在9号线,但那不是我需要的。我试着用代替那条线
else continue;
但它也不起作用"currentCommand";是一个c样式字符串。
std::string Parser::dest(){
//Determines whether C-command has a dest mnemonic
bool hasDest = false;
for (int i=0; i<strlen(currentCommand); i++){
if (currentCommand[i] == '='){
hasDest = true;
break;
}
//else return "null";
}
if (hasDest == false) return "null";
std::string destm;
char temp;
int index = 0;
temp = currentCommand[index];
while (temp != '='){
destm += temp;
index++;
}
return destm;
}
当我调用这个函数时,我应该得到一个输出,当我取消注释//else return "null"
时,我得到了它。。但这不是我需要的输出。但当我离开那行评论时,我没有得到任何输出,过了一段时间,出现了这个错误:
抛出"std::bad_alloc"实例后调用terminate
what():std::bad_alloc
1钻孔(堆芯倾倒)
temp = currentCommand[index];
while (temp != '='){
destm += temp;
index++;
}
while循环中的"temp"没有任何变化。。。。在某个时刻,你会得到一个坏名字,这并不奇怪。也许
while ((temp = currentCommand[index++]) != '=') {
destm += temp;
}
当第一个字符不是"="时,'else'语句立即退出函数。您真正想要的是:'如果整个for循环没有找到'=',那么执行else语句。所以'else'应该在for循环之后。但你却把它插进去了。所以现在您的代码说:如果第一个字符不是"=",就退出。
但不要担心,循环if (hasDest==false)
之后的行将完全满足您的需要,因此您对其他行进行评论是完全可以的。无论如何,这是错误的。
还有一件事,你应该返回NULL作为常量,它被定义为(void*)0,而不是一个说英语单词"NULL"的字符串。否则,您可能会出现错误,因为您在函数的堆栈上分配了一个char数组并返回了一个指向它的指针,但当函数终止时,该数组将被丢弃。
temp在while循环中不变->无限循环->每次通过都会向字符串添加一个新的字符->内存耗尽
实际上,您的for
循环根本不是问题所在。(尽管使用像strchr
这样的现有功能可能仍然是个好主意。)
这是导致问题的代码:
std::string destm;
char temp;
int index = 0;
temp = currentCommand[index];
while (temp != '=') {
destm += temp;
index++;
}
您将temp
设置为字符串中的第一个字符,但在while循环中,您从未实际更改temp
的值。您的destm
将不断增长,不断增加temp
的初始值,直到内存耗尽(这解释了您获得bad_alloc
的原因)。
您正在测试字符串中的第一个字符是'='
,当然不是,您返回的是null
。下一个while循环不会执行任何操作,因为条件会检查第一个字符是否与'='
不同。在这一点上,您已经知道它不是,否则您将已经返回null
。因此,您会得到一个未初始化的字符串,它会导致您注意到的奇怪行为。
我想您想复制'='
之后的所有字符。然后你应该从index=1
开始测试字符串的末尾(或者你的测试是由另一个'='
完成的)?另外,循环是错误的。您应该在循环中将临时变量更新为currentcommand[index]
。。。当前您增加了索引,但temp
仍然是第一个字符。。。。
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程