C++ C++;程序在退出时崩溃
我有一个非常简单的程序,我不知道为什么在退出时会发生崩溃。C++ C++;程序在退出时崩溃,c++,visual-studio,C++,Visual Studio,我有一个非常简单的程序,我不知道为什么在退出时会发生崩溃。 我的主要功能是一个简单的cout我想说您对以下内容有点困惑: processor_processid_map[128] = { 0L }; 他实际上在做什么。这里有大括号的事实似乎表明它会将数组中的所有值设置为零,但事实并非如此。您可以通过这种方式初始化数组,但分配给它则是另一回事 该代码所做的是尝试将元素编号128设置为零,并且由于元素被限制在范围0..127内,因此存在未定义的行为 如果您确实希望将整个阵列归零,有多种方法可以做到
我的主要功能是一个简单的
cout我想说您对以下内容有点困惑:
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);
//简单循环。
对于(int i=0;i
我想说您对以下内容有点困惑:
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);
//简单循环。
对于(int i=0;i
处理器\u进程ID\u映射[128]={0L}代码>通过写入数组的边界调用未定义的行为。为什么它会导致崩溃?内存泄漏是否会导致崩溃?未定义的行为意味着任何事情都可能发生-包括崩溃(此代码中也没有内存泄漏)。这可能是学习使用调试器的好时机。VS中的调试内部版本可能会警告您,您刚刚通过写入数组的末尾而损坏了堆栈。如果没有调试器,可能很难查明问题。我猜越界赋值已经改变了_uonexitbeagin指针__onexitbegin和_onexitend存储退出时需要调用的函数范围,系统在调用exitbegin时会崩溃。processor_processid_map[128]={0L}代码>通过写入数组的边界调用未定义的行为。为什么它会导致崩溃?内存泄漏是否会导致崩溃?未定义的行为意味着任何事情都可能发生-包括崩溃(此代码中也没有内存泄漏)。这可能是学习使用调试器的好时机。VS中的调试内部版本可能会警告您,您刚刚通过写入数组的末尾而损坏了堆栈。如果没有调试器,可能很难查明问题。我猜越界赋值已经改变了_uonexitbeagin指针__onexitbegin和_onexitend存储退出时需要调用的函数范围,系统在调用exitbegin时会崩溃。
processor_processid_map[128] = { 0L };
// 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);