gpt4 book ai didi

c - 在 C 中使用 memcpy 时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:47 25 4
gpt4 key购买 nike

我在我的代码中使用 memcpy 函数,当我运行它时出现了 Segmentation Fault 错误。以下是代码。

memcpy ((void *) ((unsigned int) core_data + (width * height * bpp)), (void *) core_data, (width * height * bpp));

core_data 是unsigned short 指针,height、width 和bpp 是static int 类型。 (width * height * bpp) 的值为8355840。当我减少这个值时,比如说 10,错误就解决了。但在实际情况下,我必须将值保持为 8355840。任何解决方案?

谢谢

最佳答案

请显示更多代码。

您对强制转换的使用很奇怪,而且里面的括号太多,难以阅读。你应该很少将指针转换为整数,如果你这样做,你必须使用例如intptr_t 以确保整数足够大以容纳指针值(unsigned int 中的位数可能小于 unsigned 中的位数short *), 否则指针在转换时被销毁。

它应该只是:

memcpy(core_data + width * height * bpp, core_data, width * height * bpp);

C 中的指针算法是一件(非常好的)事情,您不需要仅仅为了计算地址而转换为整数或从整数转换。请记住,指针运算是根据所指向对象的大小“缩放”的,这可能意味着如果 core_data 是指向 16 位的指针,则 bpp 应该只是 1整数,您的像素是 16 位。

当然,还要确保正确分配了内存,即您这样做:

core_data = malloc(2 * width * height * bpp * sizeof *core_data);

并让它返回非NULL

当然,我们可以通过分解出一个“框架”的大小来进一步提高这段代码的美观度:

const size_t frame_size = width * height * bpp;

然后我们可以在任何需要的地方使用它,使发生的事情更清楚:

core_data = malloc(2 * frame_size);

和:

memcpy(core_data + frame_size, core_data, frame_size);

关于c - 在 C 中使用 memcpy 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22090578/

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