在64位和32位系统上运行程序
Running a program on a 64bit and 32bit system
一个在64位系统上完美运行的c++程序在32位系统上崩溃有什么原因吗?我在2台服务器上测试了一个程序。一个是64位,另一个是32位。该程序没有特定于位的命令。最初它在两者中都起作用,直到我修改并添加了一个结构并调用它。当第一次调用这个结构对象时,程序崩溃了。但是,如果我在崩溃前一行打印元素的值,那么值就在那里。顺便说一句,我指的是整数,没有指针或其他有趣的东西。我尝试将这些整数初始化为uint32_t,并进行这样的实验。但是遇到了死胡同。
结构类似于
struct info {
int id1, id2;
string test;
};
map<string, info> allInfo
vector<string> temp;
/* temp populated */
info details = {atoi(temp[0].c_str()),atoi(temp[2].c_str()),temp[3].c_str()};
allInfo[temp[1].c_str()] = details;
/*somewhere after this it is accessed */
map<string, info>::iterator i;
/* printing the values here seems ok.. */
cout << (*i).second.id1 << endl << (*i).second.id2 << endl;
string first_id = "idOne : " + (*i).second.id1;
string second_id = "idTwo: " + (*i).second.id2;
可能会出现多个问题,如果没有调试器,发现这些问题将是一场噩梦。
选项1:说服对服务器具有管理权限的用户安装gdb
。
选项2:在各处添加print语句,以准确地计算出segfault发生在便利贴上的哪一行(或者尝试自己计算)。
一个简单的原因是未定义的行为。
只是猜测。你是在64位机器上编译的吗?可能有一些操作码在32位机器中不可用。
因此,在32位构建中没有强制转换,没有动态分配和崩溃,而在64位构建中则没有。我的第一个猜测是访问他们范围之外的数组。
您正在向中的字符数组添加整数
string first_id = "idOne : " + (*i).second.id1;
string second_id = "idTwo: " + (*i).second.id2;
可能是测试集不同,在非抛出系统上,您意外地获得了一个有效的地址来分配给字符串变量。
相关文章:
- 运行程序时出现问题
- 分段错误当我试图运行程序时出错
- C++ 每次运行程序时我都会"nan"输出的问题
- 通过 g++ 运行程序时没有这样的文件或目录
- 重新运行程序和字符串流?
- 无法在 VS Code 上使用代码运行程序运行C++文件
- 使用有限的 RAM 运行 c++ 程序
- 继续运行程序而无需任何干预,直到要求退出为止
- 如何在每次运行程序时写入文件的下一行?
- 控制台在运行C ++程序后立即关闭(无需调试)
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 远程运行程序
- 在 Heroku 上运行 C++ 程序
- 如何在Powershell中运行C++程序,就像CMD一样?
- 为什么与Java和Python相比,使用Cmake运行C++程序每次都需要这么长时间?
- C++随机数生成器通常在 Visual Studio 中运行程序时在 2 次后停止生成数字
- 崇高文本 3 - 在终端中编译并运行 C++ 程序(路径包含空格)
- 我收到阻止我运行程序的警告,但不确定如何解决
- C++ Visual Studio 无法完全运行程序
- 在SIGABRT c ++信号之后继续运行程序