valgrind realloc error: Conditional jump or move depends on uninitialised value(s)
valgrind realloc error: Conditional jump or move depends on uninitialised value(s)
==17209== Conditional jump or move depends on uninitialised value(s)
==17209== at 0x402E7C5: __GI___rawmemchr (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==17209== by 0x40CE921: _IO_str_init_static_internal (strops.c:45)
==17209== by 0x40B0B76: __isoc99_vsscanf (isoc99_vsscanf.c:42)
==17209== by 0x8048647: main (lala.c:23)
==17209== Uninitialised value was created by a stack allocation
==17209== at 0x8048659: gatherInfoSalt (lala.c:28)
==17209==
.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
struct sysinfo_s {
char *salt_id;
};
void gatherInfoSalt(char ** );
int main (int argc, char *argv[]) {
struct sysinfo_s si;
si.salt_id = malloc(1);
*si.salt_id = 0;
gatherInfoSalt(&si.salt_id);
free(si.salt_id);
}
void gatherInfoSalt(char ** salt_id) {
FILE * fp;
char buf[256];
int r;
if (!(fp = fopen("/etc/salt/minion.d/id.conf","r"))) {
perror("fopen");
return;
}
r=fread(buf,1,255,fp);
//adding *buf=0 here removes the error (but removes functionality)
if (r) {
*salt_id=realloc(*salt_id,r-2);
**salt_id=0;
sscanf(buf,"id:%s",*salt_id);
//sscanf(buf,"id:%s",buf1);
}
printf("saltid: %s\n",*salt_id);
fclose(fp);
}
在声明buf时初始化buf或在fread之前将其memset为0。
这个
r=fread(buf,1,255,fp);
sscanf(buf,"id:%s",....
应该是:
r=fread(buf,1,255,fp);
buf[r]=0;
sscanf(buf,"id:%s",....
==17209== Conditional jump or move depends on uninitialised value(s)
==17209== at 0x402E7C5: __GI___rawmemchr (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==17209== by 0x40CE921: _IO_str_init_static_internal (strops.c:45)
==17209== by 0x40B0B76: __isoc99_vsscanf (isoc99_vsscanf.c:42)
==17209== by 0x8048647: main (lala.c:23)
==17209== Uninitialised value was created by a stack allocation
==17209== at 0x8048659: gatherInfoSalt (lala.c:28)
==17209==
.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
struct sysinfo_s {
char *salt_id;
};
void gatherInfoSalt(char ** );
int main (int argc, char *argv[]) {
struct sysinfo_s si;
si.salt_id = malloc(1);
*si.salt_id = 0;
gatherInfoSalt(&si.salt_id);
free(si.salt_id);
}
void gatherInfoSalt(char ** salt_id) {
FILE * fp;
char buf[256];
int r;
if (!(fp = fopen("/etc/salt/minion.d/id.conf","r"))) {
perror("fopen");
return;
}
r=fread(buf,1,255,fp);
//adding *buf=0 here removes the error (but removes functionality)
if (r) {
*salt_id=realloc(*salt_id,r-2);
**salt_id=0;
sscanf(buf,"id:%s",*salt_id);
//sscanf(buf,"id:%s",buf1);
}
printf("saltid: %s\n",*salt_id);
fclose(fp);
}
在声明buf时初始化buf或在fread之前将其memset为0。
这个
r=fread(buf,1,255,fp);
sscanf(buf,"id:%s",....
应该是:
r=fread(buf,1,255,fp);
buf[r]=0;
sscanf(buf,"id:%s",....