when I print out my array in one place it works fine, in another function the same code don't work.
my code
Code:
#include <stdio.h>
#include <stdlib.h>
#include "lab41.h"
int readfil(FILE *filen, person *personer[10]) {
int counter = 0;
char mystring[100];
person p1;
while(feof(filen) == NULL) {
fscanf(filen,"%s", &p1.fnamn);
fscanf(filen,"%s", &p1.enamn);
fscanf(filen,"%d", &p1.alder);
fscanf(filen,"%d", &p1.vikt);
personer[counter] = &p1;
/*--------test ---------*/
printf("%s", personer[counter]->fnamn);
printf("\n");
printf("%s", personer[counter]->enamn);
printf("\n");
printf("%d", personer[counter]->alder);
printf("\n");
printf("%d", personer[counter]->vikt);
printf("\n");
/*--------slut test-------*/
counter++;
}
printf("\n-----------------END---------------\n");
return 0;
}
int skriv_ut_personer(FILE *filen, person *personer[10]) {
int counter = 0;
rewind (filen);
while(counter < (sizeof(personer)-1)) {
printf("%s", personer[counter]->fnamn);
printf("\n");
printf("%s", personer[counter]->enamn);
printf("\n");
printf("%d", personer[counter]->alder);
printf("\n");
printf("%d", personer[counter]->vikt);
printf("\n");
counter++;
}
free(personer);
return 0;
}
int main() {
person *personer[10];
FILE *filen;
char filnamn[40];
enum filtyp {db,txt,bin};
typedef enum filtyp filtyp;
printf("Skriv filnamn: ");
scanf("%s", &filnamn);
if((filen = fopen(filnamn, "r")) == NULL) {
printf("file don't exist");
exit(1);
}
readfil(filen,personer);
skriv_ut_personer(filen,personer);
return 0;
}
header
Code:
typedef struct {
char fnamn[40];
char enamn[40];
int alder;
int vikt;
} person;
output
Code:
client128-24:CORSAIR $ ./a.out
Skriv filnamn: p.txt
Johan
olsson
32
64
nilj
kall
31
56
frida
........
32
12
monika
ulv
54
123
monika
ulv
54
123
-----------------END---------------
moni????
???W????1???1?X???????8?1??1??
-1607342536
0
???W????1???1?X???????8?1??1??
-1607342536
0
???W????1???1?X???????8?1??1??
-1607342536
0
a.out(607) malloc: *** error for object 0xbffff904: Non-aligned pointer being freed
*** set a breakpoint in malloc_error_break to debug