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()));
}