gpt4 book ai didi

c++ - 为什么new和malloc输出的结果不一样?

转载 作者:行者123 更新时间:2023-11-28 01:38:09 26 4
gpt4 key购买 nike

这是我的代码;

#include <cstdio>
#include <cstdlib>
using namespace std;

int MIN(int a, int b)
{
if (a <= b) return a;
else return b;
}

int main(void)
{
int a;
scanf("%d", &a);

int *n = new int[a];
//int *n = (int *)malloc(sizeof(int)*(a));
for (int i = 0; i < a; i++)
n[i] = a;

n[a] = 0;

for (int i = a; i > 1; i--)
{
if (i % 3 == 0) n[i / 3] = MIN(n[i] + 1, n[i / 3]);
else if (i % 2 == 0) n[i / 2] = MIN(n[i] + 1, n[i / 2]);
n[i - 1] = MIN(n[i] + 1, n[i - 1]);
}

printf("%d", n[1]);

delete[] n;
//free(n);
return 0;
}

如果你使用 new,什么也不会发生。

但是,使用 malloc 会导致检测到堆损坏错误。

我想知道为什么会这样,以及与 newmalloc 有什么不同。

最佳答案

n[a] = 0;

此行并进一步访问数组 n 中索引为 a 的元素会导致未定义的行为,这就是程序有时会崩溃的原因。

如果你需要处理索引为a的元素,那么为此分配足够的内存:

int *n = new int[a + 1];

关于c++ - 为什么new和malloc输出的结果不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48366566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com