我为两个指针分配了足够的内存,我将其视为数组:
// Allocate memory for both adj and deg
int *adjdeg = malloc(sizeof(int)*n*n);
adj = adjdeg;
deg = adjdeg + n*n - n;
然后我使用来自string.h的GNU bzero
来将deg
“数组中的值初始化为0(adj
”数组“不需要初始化因为我在读它之前写了它。这工作正常,我的程序运行成功,但每当我从deg
(IE。deg[0]
)读取时,valgrind报告有关使用初始化值的许多错误。以下是我对bzero
的致电:
// My bzero call
bzero(deg, n);
如果我删除对bzero的调用并使用如下的循环,那么valgrind很高兴。
int i;
for(i = 0; i < n; i++)
deg[i] = 0;
有没有办法告诉valgrind bzero正确地在内存中初始化该区域?我正在使用gcc 4.6.3和valgrind 3.7.0
注意:如果我使用memset
而不是bzero
,我在valgrind中会遇到相同的错误。
答案 0 :(得分:6)
您应该使用:
bzero(deg, n * sizeof(int));
实际上,您正在初始化n
个字节,而不是n
个整数。为了获得最大的可移植性,您应该使用memset()
而不是bzero()
,但仍需要大小为sizeof(int)
的乘数:
memset(deg, '\0', n * sizeof(int));