C++程序在退出时崩溃
C++ Program Crash on exit
我有一个非常简单的程序,我不知道为什么在退出时会发生崩溃。我的主要功能是一个简单的cout<<"Hello world";
但是我添加了另一个 cpp 文件:
system_information.cpp:
system_information::system_information() {
threadid_processid_map[22]=23;
processor_processid_map[128] = { 0L };
processor_threadid_map[128] = { 0L };
}
头文件如下所示:
system_information.h
class system_information{
public:
DWORD processor_processid_map[128];
DWORD processor_threadid_map[128];
unordered_map<DWORD, DWORD> threadid_processid_map;
system_information();
};
我只是在我的类实例中声明了这个文件:
解析.cpp:
#include "system_information.h"
system_information sys_info;
我的程序在 crt0at.c 上退出时崩溃,这一行:
onexitbegin_new = (_PVFV *) DecodePointer(__onexitbegin);
我做错了什么?
我想
说你对什么有点困惑:
processor_processid_map[128] = { 0L };
实际上正在做。您在那里有大括号的事实似乎表明您认为它会将数组中的所有值设置为零,但事实并非如此。您可以通过这种方式初始化数组,但分配给它是另一回事。
该代码所做的是尝试将元素编号128
设置为零,并且由于元素仅限于范围0..127
,因此您在那里拥有的是未定义的行为。
如果您确实希望将整个阵列清零,有许多方法可以做到这一点,包括:
// Simple loop.
for (int i = 0; i < sizeof(id_map) / sizeof(*id_map); ++i)
id_map[i] = 0;
// Setting memory.
#include <cstring>
memset(id_map, 0, sizeof(id_map));
// Fill algorithm.
#include <algorithm>
std::fill(id_map, id_map + sizeof(id_map) / sizeof(*id_map), 0);
相关文章:
- 程序过早结束,可能已经崩溃了.退出代码0xc0000005
- C++程序在退出时崩溃
- 全局范围内的对象会导致程序退出时崩溃
- 为什么C Pthread自行退出而没有过程崩溃
- C 程序用退出代码崩溃:9(Sigkill)
- 为什么全局或静态对象会导致程序退出时崩溃
- Boost 测试在使用 Clang 4.1 (LLVM 3.1svn) 退出时崩溃
- 退出应用程序时崩溃
- DirectShow 代码在退出后崩溃(PushSourceDesktop 示例)
- 在DLL中提供的ZeroMQ上下文单例在程序退出时崩溃(VS2010 win7 x64 zmq 4.0x)
- 为什么我的安卓应用在线程退出时崩溃
- OpenCV程序在退出时崩溃linux(使用cvtColor)
- 可视C++程序在退出后崩溃
- 退出后代码崩溃
- 崩溃或被迫退出后,C++动态分配的内存返回
- 试图调试TensorFlow c++代码时,GDB退出/崩溃
- 我的win32程序是否有办法告诉它启动的子进程已经崩溃(而不仅仅是退出)?
- CallWindowProc退出时崩溃
- 应用程序退出时CEF崩溃(QT5+CEF3.2526)
- Exe在c++中退出该方法后崩溃