0

これは私の最も奇妙なエラーの 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 です。

4

0 に答える 0