我正在为我将其视为数组的两个指针分配足够的内存:
// 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
“array"不需要初始化它,因为我在读取它之前先写入它)。这工作正常,我的程序运行成功,但每当我从 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 中遇到同样的错误。
最佳答案
你应该使用:
bzero(deg, n * sizeof(int));
实际上,您正在初始化 n
个字节,而不是 n
个整数。为了获得最大的可移植性,您可能应该使用 memset()
而不是 bzero()
,但是您仍然需要 sizeof(int)
中的乘数尺寸:
memset(deg, '\0', n * sizeof(int));
关于c - valgrind 不理解 bzero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674514/