gpt4 book ai didi

c - 不确定堆分配创建的未初始化值在哪里

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

一切似乎都工作正常,内存正在分配和释放并做它应该做的事情但是当我用 valgrind --track-origins=yes 检查它时,我在输入名称和数字后得到这个条件跳转.

==25590== Conditional jump or move depends on uninitialised value(s)
==25590== at 0x4007BD: add_car (in /students/5/gmi6y5/cs2050/lab4/a.out)
==25590== by 0x400704: main (in /students/5/gmi6y5/cs2050/lab4/a.out)
==25590== Uninitialised value was created by a heap allocation
==25590== at 0x4A069EE: malloc (vg_replace_malloc.c:270)
==25590== by 0x4006D9: main (in /students/5/gmi6y5/cs2050/lab4/a.out)

typedef struct FreightCars_
{
char *name;
int number;
struct FreightCars_ *next_car;
}FreightCar;


int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Insufficient number of arguements\n");
return 0;
}

int size = atoi(argv[1]);
FreightCar *engine = (FreightCar*)malloc(sizeof(FreightCar));
int i;
for(i=0;i<size;i++)
{
printf("Enter in freight car name and number: ");
add_car(engine);
}
free_cars(engine);

return 0;
}

void add_car(FreightCar *engine)
{
FreightCar *newPtr = (FreightCar*)malloc(sizeof(FreightCar));
newPtr->name = malloc(sizeof(char) * MAX_STR_LEN);

if(newPtr == NULL)
{
printf("Unable to allocate memory\n");
exit(1);
}
scanf("%s", newPtr->name);
scanf("%d", &newPtr->number);
newPtr->next_car = NULL;

if(engine->next_car == NULL)
{
engine->next_car = newPtr;
printf("added at the beginning\n");
}
else
{
FreightCar *currentPtr = engine;
while(currentPtr->next_car != NULL)
{
currentPtr = currentPtr->next_car;
}
currentPtr->next_car = newPtr;
printf("added later\n");
}
free(newPtr->name);
}

void free_cars(FreightCar *engine)
{
if(engine == NULL)
{
printf("Linked list is empty now\n");
}
else
{
free_cars(engine->next_car);
}
free(engine);
engine = NULL;
}

最佳答案

主要是你做的

FreightCar *engine = (FreightCar*)malloc(sizeof(FreightCar));

然后在你调用的for循环中

        add_car(engine);

add_car 做

if(engine->next_car == NULL)

但正如@Oli Charlesworth 在评论中指出的那样,您尚未初始化引擎指向的内存,因此您正在根据此处未初始化的内存内容做出决定,因此出现了 Valgrind 投诉。

关于c - 不确定堆分配创建的未初始化值在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24346572/

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