我很难解决这个问题.在初始化分配的内存后,valgrind说"条件跳转或移动取决于未初始化的值".
所以,这是我的代码.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int st_a;
int st_b;
char st_c:
char st_d:
} TEST_ST;
int inner_func(int *a, TEST_ST *st_a)
{
//memset(st_a, 0, sizeof(TEST_ST));
if(a[0] > 0)
{
printf("inner_func: bigger than zero\n");
}
else
{
printf("inner_func: else\n");
}
st_a->st_a = 1;
}
int main()
{
int *a;
int *b;
TEST_ST *st_a;
a = (int *)malloc(sizeof(int) * 10);
b = (int *)malloc(sizeof(int) * 10);
memset(a, 0, sizeof(int) * 10);
//memset(b, 0, sizeof(int) * 10);
st_a = (TEST_ST *)malloc(sizeof(TEST_ST));
a[0] = 1;
if(a[9] > 0)
{
printf("Bigger than zero\n");
}
else
{
printf("Smaller than zero or equal\n");
}
inner_func(b, st_a);
free(st_a);
free(b);
free(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个valgrind日志.

我不明白为什么valgrind说的像图中的第一行.
有人可以帮帮我吗?
您正在阅读的值实际上并未初始化.
有问题的行在函数中inner_func:
if(a[0] > 0)
Run Code Online (Sandbox Code Playgroud)
的a是参数的功能,这被称为是这样的:
inner_func(b, st_a);
Run Code Online (Sandbox Code Playgroud)
所以a在功能上是一样b的main. b指向返回的内存malloc,但该内存从未初始化.
取消注释,您呼叫的线路memset上b.