【发布时间】:2021-03-23 14:51:27
【问题描述】:
我正在尝试在以下代码中查找错误。当我使用 Valgrind 运行程序时,我得到了错误说明。未初始化的值是由堆分配(malloc)创建的
int main(){
int **point;
int val=3;
int i;
int j;
point=malloc(sizeof(int*)*val);
for(i=0;i<val;i++){
point[i]=malloc(sizeof(int)*4);
}
for(i=0;i<val;i++){
for(j=0;j<4;j++){
point[i][j]=point[i][j]+i*j+val;
}
}
【问题讨论】:
-
您发布的程序看起来不错,只是缺少所需的标头并且未释放分配的内存。问题应该是在最初遵循的代码中使用已分配和未初始化的数据。请发帖Minimal, Reproducible Example。
-
这在第 13 行结束,是否有任何额外的内容(如任何包含的标题)未包含在此处?
-
posted 代码是否产生了指定的错误?如果不是,则不能考虑minimal reproducible example。
-
请注意,valgrind 通常会报告访问未初始化值的行,以及分配内存的行。看起来您可能专注于第二个,但您忽略了第一个(这可能是在这一点之后,在您没有显示的代码中)。
-
“Valgrind 告诉我...”最好发布 Valgrind 给出的完整信息。