C++程序在退出时崩溃

C++ Program Crash on exit

本文关键字:崩溃 退出 程序 C++      更新时间:2023-10-16

我有一个非常简单的程序,我不知道为什么在退出时会发生崩溃。我的主要功能是一个简单的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);