x-kom hosting

[C] Segfault przy czytaniu z pliku do tablicy..

pawelski
utworzono
utworzono

Hi!
Mam taki oto kod:
[code]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct kontakt{
char imie[16];
char nazwisko[16];

}kontakt;
/*
*
*/
int kontakt_zapisz();
int kontakt_usun();
int kontakt_wyswietl();
int main(int argc, char** argv) {
// kontakt_zapisz();
kontakt_wyswietl();
return (EXIT_SUCCESS);
}
int kontakt_wyswietl(){
FILE *plik;
kontakt *kontakty=(kontakt *)malloc(sizeof(struct kontakt));
int ile=0;
if(!(plik=fopen("kontakty.dat","r"))){
perror("Nie mozna otworzyc kontakty.dat");
return 1;
}
while(fread(kontakty,sizeof(struct kontakt),1,plik)==1){
ile+=1;
realloc(kontakty,sizeof(struct kontakt)*(ile+1));
printf("Ile: %i, Kontaktow:%i",ile,sizeof(kontakty));
printf("%i",sizeof(kontakty));
// printf("Imie: %s, Nazwisko:%s\n",kontakty[ile].imie,kontakty[ile].nazwisko);
}
free(kontakty);
fclose(plik);
}
int kontakt_zapisz(){
FILE *plik;
kontakt nowy;
plik=fopen("kontakty.dat","a+");
char imie[16];
char nazwisko[16];
printf("Podaj imie i nazwisko:\n");
scanf("%s%s",imie,nazwisko);
strcpy(nowy.imie,imie);
strcpy(nowy.nazwisko,nazwisko);
if(!(fwrite(&nowy,sizeof(struct kontakt),1,plik))){
perror("Nie udalo sie dopisac!");
}
else{
printf("Dopisano pomyslnie");
}
fclose(plik);
}[/code]
Do pliku kontakty.dat wczesniej zapisalem 3 pozycje, debugger z netbeans pokazuje ze zostaje wczutana tylko jedna pozycja z pliku, po pierwszym przebiegu petli w linii "while(fread(kontakty,sizeof(struct kontakt),1,plik)==1){" rzuca segfaultem.. Nie mam juz do tego sił.. Co zrobiłem źle?

rafalluz
komentarz
komentarz

Zarzuć jeszcze plik, który wczytujesz, spróbujemy zreplikować.

pawelski
komentarz
komentarz

Uruchomiłem 2 razy program z odkomentowana funkcja kontakty_zapisz, zreszta poradziłem sobie już tak:
[code]
int kontakt_wyswietl(){
FILE *plik;
kontakt *kontakty=(kontakt *)malloc(sizeof(struct kontakt));
kontakt *temp;
int ile=0;
if(!(plik=fopen("kontakty.dat","r"))){
perror("Nie mozna otworzyc kontakty.dat");
return 1;
}
while(fread(&kontakty[ile],sizeof(struct kontakt),1,plik)==1){
ile+=1;
temp=(kontakt* )realloc(kontakty,sizeof(struct kontakt)*(ile+1));
kontakty=temp;
printf("Imie: %s, Nazwisko:%s\n",kontakty[ile-1].imie,kontakty[ile-1].nazwisko);
}
free(kontakty);
fclose(plik);
return 0;
}[/code]
Bez electric fance i gdb bym sobie nie poradził.. Mały offtop: Znacie jakieś jeszcze narzędzia ułatwiające pisanie w c?

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.