1

我为两个我视为数组的指针分配了足够的内存:

// Allocate memory for both adj and deg
int *adjdeg = malloc(sizeof(int)*n*n);

adj = adjdeg;
deg = adjdeg + n*n - n;

然后我使用bzero来自 string.h 的GNU 将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

注意:如果我使用 valgrindmemset而不是bzero.

4

1 回答 1

6

你应该使用:

bzero(deg, n * sizeof(int));

实际上,您正在初始化n字节,而不是n整数。为了获得最大的可移植性,您可能应该使用memset()而不是bzero(),但您仍然需要sizeof(int)大小的乘数:

memset(deg, '\0', n * sizeof(int));
于 2012-12-02T22:25:06.013 回答