0

这是我最奇怪的错误之一。

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