首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为何华润报告“2码无效阅读”?

为何华润报告“2码无效阅读”?
EN

Stack Overflow用户
提问于 2014-10-28 04:04:07
回答 1查看 5.7K关注 0票数 5
代码语言:javascript
复制
struct item
{
    int a;
};
int main()
{
    item *a = (item *)malloc(sizeof(item));
    item *b = (item *)malloc(sizeof(item));
    short *c = (short *)b;
    c += 3; 
    memcpy(a, c, sizeof(int));
    free(a);
    free(b);
    return 0;
}

为什么valgrind响应“无效的2大小的阅读”?我想应该是4号的。

来自Val差尔的示例消息:

代码语言:javascript
复制
==19134== Invalid read of size 2
==19134== at 0x4C2F7E0: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19134== by 0x400625: main (main.cpp:19)
==19134== Address 0x51fd096 is 2 bytes after a block of size 4 alloc'd
==19134== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19134== by 0x4005FC: main (main.cpp:16) 
EN

回答 1

Stack Overflow用户

发布于 2015-06-18 18:59:48

我得到了“大小为2的无效读取”试图malloc()一个2x2单通道纹理(4个字节/ uint8_ts)。我以为分配的字太小了--所讨论的体系结构上的字大小是8字节(64位)--所以我把分配加倍了,它停止了valgrind的抱怨。由于malloc()应该是对齐的,所以我对此感到有点惊讶(我相信这对专家来说是显而易见的),但也许它会对其他人有所帮助。没有必要使用额外的分配空间,它只需要在那里。

.这是一个解决办法,即使它不能带来洞察力.问题发生在gcc 4.9.1 (Ubuntu4.9.1-16 ubuntu6)..

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26600704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档