Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;程序在退出时崩溃_C++_Visual Studio - Fatal编程技术网

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);