我正在使用Linux x86_64机器来构建我的程序.我已将共享库链接到可执行文件.在我的项目中,我正在调用一个已vector<string>在函数内声明的函数.调用该函数时,我的程序被杀死.通过下面的GDB调试是我得到的输出.
Program received signal SIGILL, Illegal instruction.
0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87
87 : _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
(gdb) bt
0 0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87
Run Code Online (Sandbox Code Playgroud)
这是我的共享库编译问题吗?我对此充满了头脑.请帮忙.
-Chaks
为查询添加更多信息:是的,我调用的函数File_ToText是OC_Catalog_c类中的虚函数.其他类的成员变量具有类OC_Catalog_c的对象,该对象也具有虚函数File_ToText.使用该对象我从虚函数File_ToText调用OC_Catlog_c的File_ToText函数.我将展示一段代码:
class Oc_Catalog_c
{
virtual vector<string> File_ToText (void) const;
}
class B
{
const OC_Catalog_c* m_pCatalog;
virtual vector<string> File_ToText (void) const;
}
vector<string> B::File_ToText( void ) const
{
vector<string> a_SubData;
a_SubData = m_pCatalog->File_ToText();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用标准排序函数通过为其编写比较函数来对其中包含一组对的多重映射进行排序,但我在其中遇到了一些错误。我正在尝试使用值对地图进行排序,然后再次使用键对其进行排序。比较函数导致一些错误。你能指出我哪里错了吗?
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
bool cmp(const pair<int,int>& a, const pair<int,int>& b)
{
return a.second < b.second;
}
int main() {
// multimap of int ssId, int phone numbers
multimap <int, int> m;
m.insert(make_pair(1, 8));
m.insert(make_pair(1, 5));
m.insert(make_pair(2, 4));
m.insert(make_pair(2, 3));
m.insert(make_pair(3, 1));
sort(m.begin(), m.end(), cmp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出应该是这样的:
1 5
1 8
2 3
2 4
3 1
Run Code Online (Sandbox Code Playgroud)