pingulingo
asked on
beginner C - malloc / free / valgrind. Help please
Can someone give me a hint why valgrind says I'm loosing memory:
==28478== 56 bytes in 7 blocks are definitely lost in loss record 1 of 1
==28478== at 0x4006F3D: malloc (vg_replace_malloc.c:207)
==28478== by 0x8048443: insert (part1.c:21)
==28478== by 0x80484C2: main (part1.c:38)
I know normally you wouldn't have a separate loop just for free() but its an assignment so not my rules! I have equal numbers of malloc & free, so I cant work out where I am going wrong.
Thanks !
==28478== 56 bytes in 7 blocks are definitely lost in loss record 1 of 1
==28478== at 0x4006F3D: malloc (vg_replace_malloc.c:207)
==28478== by 0x8048443: insert (part1.c:21)
==28478== by 0x80484C2: main (part1.c:38)
I know normally you wouldn't have a separate loop just for free() but its an assignment so not my rules! I have equal numbers of malloc & free, so I cant work out where I am going wrong.
Thanks !
#include <stdio.h>
#include <stdlib.h>
/* these arrays are just used to give the parameters to 'insert',
to create the 'people' array */
#define HOW_MANY 7
char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", "Harriet"};
int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24};
static int nextfreeplace = 0;
/* declare your struct for a person here */
typedef struct person {
char *peopleName;
int age;
}Human;
static void insert (Human *people[], char *name, int age)
{
people[nextfreeplace] = (Human *)malloc (sizeof(Human));
/* put name and age into the next free place in the array parameter here */
people[nextfreeplace]->peopleName = name;
people[nextfreeplace]->age = age;
nextfreeplace ++;
}
int main(int argc, char **argv) {
/* declare the people array here */
Human *people[HOW_MANY];
int count = 0;
for (count = 0; count < HOW_MANY; count ++) {
insert (people, names[count], ages[count]);
}
/* print the people array here*/
int index = 0;
for (index = 0; index < HOW_MANY; index ++)
{printf("\nPerson number %d is called %s and is %d years old", index, people[index]->peopleName, people[index]->age); }
int index3 = 0;
for (index3 = 0; index < HOW_MANY; index ++)
{
free(people[index3]);
}
return 0;
}
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER