1

Visual Studio 2005 中是否有办法找出导致此访问冲突的指针或变量?我试图在调试模式下运行并在它发生时中断。通过查看调用堆栈,它发生在函数的末尾(见下文)。可以使用 try/catch 找出它是哪个指针吗?


编辑: 发布我的代码:

我的应用程序中有一个 Qt 行编辑和一个复选框。切换复选框将切换行编辑中的数据格式。像 3'b111 <==> 3'h7。下面是连接到复选框 stateChanged 信号的回调函数。当破坏局部变量时,异常发生在函数的末尾。

// switch hex/binary format. 15'h0000 <==> 15'b000000000000000
void switchDataFormat(int checkState) {
    QLineEdit* writeRegLE = this->getWriteRegLineEdit();
    string oldText = writeRegLE->text().toStdString();
    string newText = "";
    int maxLength;
    string regLengthText = oldText.substr(0, oldText.find('\''));
    string regValueText = oldText.substr(oldText.find('\'')+2);
    int regLength = this->getRegLength();

    if (checkState == Qt::Unchecked) {
        // switch to binary format
        maxLength = regLengthText.size() + 2 + regLength;
        string binaryText;
        for (int i = 0; i < regValueText.size(); ++i) {
            binaryText += hexToBinary(regValueText[i]);
        }
        newText = regLengthText + "'b" + binaryText.substr(binaryText.size()-regLength);  // trimming leading zeros to fit regLength
    }
    else {
        // switch to hex format
        maxLength = regLengthText.size() + 2 + regLength/4 + 1;
        newText = regLengthText + "'h";
        // zero filling to 4*n bits
        if (regLength%4 != 0) regValueText = string(regLength%4,'0') + regValueText;
        for (int i = 0; i < regValueText.size(); i+=4) {
            newText += binaryToHex(regValueText.substr(i,4));
        }
    }

    writeRegLE->setMaxLength(maxLength);
    writeRegLE->setText(QString::fromUtf8(newText.c_str()));
}
4

0 回答 0