例外:使用 C++ 的 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)[关闭]
Posted
技术标签:
【中文标题】例外:使用 C++ 的 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)[关闭]【英文标题】:Exception: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) using C++ [closed] 【发布时间】:2018-01-23 15:10:36 【问题描述】:The problem is as the picture shows
vector<int> printMatrix(vector<vector<int> > matrix)
if (matrix.empty())
return vector<int>();
this->matrix = std::move(matrix);
int startRow = 0, lastRow = this->matrix.size() - 1;
int startCol = 0, lastCol = this->matrix[0].size() - 1;
while (startRow <= lastRow && startCol <= lastCol)
printCircle(startCol, lastCol, startRow, lastRow);
++startCol, --lastCol, ++startRow, --lastRow;
当变量 startRow 小于 lastRow 时,它运行良好。但是,一般来说,当 startRow 大于 lastRow 时,应该退出 while 循环但引发 Exception: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 代替。如图所示,我对引发异常感到困惑。
【问题讨论】:
图片在帖子中很有用,但要确保没有它们,帖子仍然清晰。如果您发布代码或错误消息的图像,请复制并粘贴或直接在帖子中输入实际代码或消息。 该网站导致浏览器安全错误。 问题似乎是您声明 printMatrix 以返回 vectormatrix[0]
是否为空。
感谢 Wiedenmann 的建议 :-) 。这是我的第一篇文章,以后会注意到我的 :-)。问题解决了,原因就像约翰说的。我很粗心 :( .
【参考方案1】:
vector<int> printMatrix(vector<vector<int> > matrix)
if (matrix.empty())
return vector<int>();
this->matrix = std::move(matrix);
int startRow = 0, lastRow = this->matrix.size() - 1;
int startCol = 0, lastCol = this->matrix[0].size() - 1;
while (startRow <= lastRow && startCol <= lastCol)
printCircle(startCol, lastCol, startRow, lastRow);
++startCol, --lastCol, ++startRow, --lastRow;
// **** return a vector here ****
需要从函数中返回一个向量,或者将其改为void。
【讨论】:
奇怪的是,编译器一开始就允许构建初始版本。很好地使编译选项更严格。或检查输出是否没有说“控制可能到达非无效函数的结尾”以上是关于例外:使用 C++ 的 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章