2012-05-07 29 views
6

Gần đây tôi đã cố gắng để theo dõi một số lỗi trong một chương trình tôi đang làm việc về việc sử dụng valgrind, và một trong những lỗi tôi nhận được:Giải thích lỗi valgrind viết không hợp lệ kích thước 4

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

dòng vi phạm # 414 lần đọc

amplitudes__[points_read] = 0x0; 

và amplitudes__ được định nghĩa trước như

uint32_t * amplitudes__ = (uint32_t*) amplitudes; 

Bây giờ rõ ràng là một uint32 _t dài 4 byte, vì vậy đây là kích thước ghi, nhưng ai đó có thể cho tôi biết tại sao nó không hợp lệ?

Trả lời

4

points_read có nhiều khả năng nằm ngoài giới hạn, bạn đang viết quá khứ (hoặc trước) bộ nhớ bạn đã cấp cho amplitudes.

2

Một sai lầm điển hình lập trình viên mới làm để có được cảnh báo này là:

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

và sau đó cố gắng đọc hoặc ghi vào bộ nhớ tại địa điểm 'kích thước':

many_a[size] = ...; 

đây việc phân bổ nên là:

many_a = malloc(sizeof *many_a * (size + 1)); 
Các vấn đề liên quan