gpt4 book ai didi

c - malloc 后访问冲突

转载 作者:行者123 更新时间:2023-12-04 10:11:52 25 4
gpt4 key购买 nike

有人可以帮助我理解以下行为:

我有一小段用于克隆浮点图像的代码。Clone 方法将指向另一个图像的指针及其尺寸作为参数。

一切都按预期工作,但有时这一行 clone[i] = color; 会导致访问冲突。异常的发生是不可预测的,也不是周期性的。在崩溃时检查变量显示 Color color = source[i]; 始终设置且有效。

malloc 怎么可能返回错误的指针?

代码:

typedef struct
{
float r;
float g;
float b;
float a;
} Color;

Color* Clone(Color* source, int width, int height)
{
int s = width * height;

Color *clone;
clone = (Color *)malloc(s * sizeof(Color));

if (clone)
{
for (int i = 0; i < s; i++)
{
Color color = source[i];

// Sometimes app crash here: Access violation
clone[i] = color;
}
}

return clone;
}

非常感谢任何帮助。

更新:

平台:Windows 64位

崩溃时变量的值:

width = 256
height = 256
s = 655536
i = 0

最佳答案

我看不出这段代码有什么大错。但是,如果堆之前已损坏,malloc 确实可以返回垃圾。实际上,malloc 通常是在检测到出现问题并且您收到明确的“堆损坏”错误消息时。

我的建议是,如果可能的话,在 valgrind 下运行程序,希望能捕获破坏堆数据结构的真正坏人……在调用此克隆函数之前发生的事情。

关于c - malloc 后访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33393633/

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