【问题标题】:Interpreting valgrind error Invalid write of size 4解释 valgrind 错误 大小为 4 的无效写入
【发布时间】:2012-05-07 10:57:29
【问题描述】:

我最近试图在我正在使用 valgrind 开发的程序中查找一些错误,我遇到的错误之一是:

==6866== Invalid write of size 4
==6866==    at 0x40C9E2: superneuron::read(_IO_FILE*) (superneuron.cc:414)

有问题的行 #414 读取

amplitudes__[points_read] = 0x0;

和幅值__之前定义为

uint32_t * amplitudes__ = (uint32_t* ) amplitudes;

现在显然 uint32_t 有 4 个字节长,所以这是写入大小,但有人能告诉我为什么它无效吗?

【问题讨论】:

    标签: gcc valgrind


    【解决方案1】:

    points_read 很可能超出范围,您正在写过去(或之前)为amplitudes 分配的内存。

    【讨论】:

      【解决方案2】:

      新程序员收到此警告的典型错误是:

      struct a *many_a;
      many_a = malloc(sizeof *many_a * size + 1);
      

      然后尝试在'size'位置读取或写入内存:

      many_a[size] = ...;
      

      这里的分配应该是:

      many_a = malloc(sizeof *many_a * (size + 1));
      

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多