gpt4 book ai didi

c - 使用 valgrind 的单位化值

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:22 26 4
gpt4 key购买 nike

我正在运行 valgrind,但出现以下错误。在我做备份之前我修复了它但现在我不记得如何了。错误是由 malloc 生成的,但我在代码中找不到错误

>Insert password for admin: ==5720== Conditional jump or move depends on uninitialised value(s)
==5720== at 0x40299EB: strcmp (mc_replace_strmem.c:538)
==5720== by 0x80496C6: adm_log_request (commands_man.c:169)
==5720== by 0x80521CA: main (mmboxman.c:9)
==5720== Uninitialised value was created by a heap allocation
==5720== at 0x4028876: malloc (vg_replace_malloc.c:236)
==5720== by 0x8049683: adm_log_request (commands_man.c:165)
==5720== by 0x80521CA: main (mmboxman.c:9)
==5720==

这是函数commands_man: 165 行是在 if(size > 0)

之后
int adm_log_request(void){

FILE *password;
char *pwdin, *frompwd = NULL;
int primo = 0/*indica se è un primo avvio*/, tentativi = 2, p, size;

if(!(password = fopen(F_PWD_ADM, "rb"))){
primo = 1;
printf("First server boot\n>Insert password for admin: ");
}
else{
primo = 0;
printf(">Insert password for admin: ");
}
p = get_hid_pass(&pwdin);
if(p < 0)
return -1;
switch(primo){
case 0:
if(!(password = fopen(F_PWD_ADM, "r")))
return -1;
fread(&size, sizeof(int), 1, password);
if(size > 0){
frompwd = (char*)malloc(size + 1);
fread(frompwd,sizeof(frompwd),1,password);
}else return 0;
while(tentativi > 0){
if(strcmp(pwdin, frompwd) != 0){
printf("\nIncorrect password\n%d attempts left\n>Insert password for admin: ", tentativi);
tentativi--;
}
else return 1;
p = get_hid_pass(&pwdin);
if(p < 0)
return -1;
}
fclose(password);
break;
case 1: //primo avvio del server
if(!(password = fopen(F_PWD_ADM, "w")))
return -1;
size = strlen(pwdin) + 1;
fwrite(&size, sizeof(int), 1, password);
fwrite(pwdin, sizeof(pwdin), 1, password);
fclose(password);
break;
}
if(tentativi == 0)
return -1;

return 1;
}

有人可以帮我修复它们吗??谢谢

最佳答案

部分问题看起来像是 sizeof 的问题:

        fread(frompwd,sizeof(frompwd),1,password);

在上面的行中,sizeof 的值为 4(假设是 32 位架构)。长度可能需要传入size。然后它仍然需要在那之后被空终止。

frompwd[size] = '\0';

fwrite 调用有类似的问题,只会写入 4 个字节的密码。

关于c - 使用 valgrind 的单位化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com