これは私の最も奇妙なエラーの 1 つです。
QRegularExpression regexp(" .*");
これは時々うまくいきます。しかし、セグメンテーション違反でクラッシュします。
0 _int_malloc /usr/lib64/libc.so.6 0x7ffff59f2196
1 malloc /usr/lib64/libc.so.6 0x7ffff59f411c
2 operator new(unsigned long) /usr/lib64/libstdc++.so.6 0x7ffff62ac0cd
3 QRegularExpression::QRegularExpression(QString const&, QFlags<QRegularExpression::PatternOption>) /usr/lib64/libQt5Core.so.5 0x7ffff6b45fdd
奇妙なことに、プログラムを起動しても時々問題が発生することがあります。エラーはまったくありません。このlocが正確に71回実行された後、クラッシュすることがあります。
私には手がかりがありません-.-
編集:
char hname[255] ="";
char hname80[255] ="";
char hcas[255] = "";
int i = number;
NAMEdll(i,hname,hname80,hcas);
shortName=hname;
fullName=hname80;
cas=hcas;
// remove unecessary spaces
QRegularExpression regexp(" .*");
cas.remove(regexp);
shortName.remove(regexp);
fullName.remove(regexp)
提案されたように、エラーを見つけるためにコードを削除しました。NAMEdll(fortran関数)と関係があるようです。このコマンドを実行すると、すべて問題ありません。それで私はこれを手に入れます:
0 _int_malloc /usr/lib64/libc.so.6 0x7ffff59f2196
1 malloc /usr/lib64/libc.so.6 0x7ffff59f411c
2 QArrayData::allocate(unsigned long, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) /usr/lib64/libQt5Core.so.5 0x7ffff6a7c0f6
3 QRegularExpressionMatchPrivate::QRegularExpressionMatchPrivate(QRegularExpression const&, QString const&, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>, int) /usr/lib64/libQt5Core.so.5 0x7ffff6b4617a
4 QRegularExpression::match(QString const&, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>) const /usr/lib64/libQt5Core.so.5 0x7ffff6b475e4
5 QRegularExpression::globalMatch(QString const&, int, QRegularExpression::MatchType, QFlags<QRegularExpression::MatchOption>) const /usr/lib64/libQt5Core.so.5 0x7ffff6b47c77
6 QString::replace(QRegularExpression const&, QString const&) /usr/lib64/libQt5Core.so.5 0x7ffff6b1c4a9
7 QString::remove qstring.h 429 0x4852fe
推測ですが、fortran コード (私のものではない) 内で malloc 呼び出しが失敗する可能性はありますか? もしそうなら、誰かがその方法を説明できますか?
編集:
解決済み: 偶然見つけました。プログラムの別の部分に、次のコードがありました。
char href[3] ="";
strcpy(href,"DEF");
これは悪いことです。なぜなら、strcpy は終了文字 '\0' も書き込むからです。したがって、書き込まれた chararray の長さは 4 です。