15

我最近试图在我正在使用 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 个字节长,所以这是写入大小,但有人能告诉我为什么它无效吗?

4

2 回答 2

9

points_read很可能超出范围,您正在写过去(或之前)分配给 amplitudes.

于 2012-05-07T11:01:01.053 回答
4

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

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

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

many_a[size] = ...;

这里的分配应该是:

many_a = malloc(sizeof *many_a * (size + 1));
于 2015-10-28T13:17:34.993 回答