这是我最奇怪的错误之一。
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。