例外:使用 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 以返回 vector 但在函数中您在 while 循环之后没有返回任何内容。我很惊讶代码甚至可以编译。 您还应该检查matrix[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)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 NUnit 运行 C++ 代码

C++中 string 中的方法的使用详解(心得)

有哪些 C++ 智能指针实现可用?

C++多态(上)

C++类和对象

C++ 社区对何时应该使用异常有普遍的共识吗? [关闭]