初始化QRegularExpression时出现分段错误,但有时只是

时间:2015-01-12 20:52:34

标签: c++ qt segmentation-fault qregularexpression

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

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  

奇怪的是,如果我启动程序有时候还可以!完全没有错误。 有一段时间之后它的崩溃事故发生了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也写了一个结束字符&#39; \ 0&#39;。所以书面的chararray长度为4。

0 个答案:

没有答案