Witam, mam do napisania program który rysuję mapę czegośtam :p, współrzędne pobieram z pliku.Nie bardzo wiem gdzie popełniłem błąd, piszę w visual studio 2010. tam jakies smieszne bledy wyskakują i program nie startuje. Może wy coś zaradzicie
#include
#include
#include
#include "winbgi2.h"
void main()
{
graphics(500,500);
int i;
int a;
FILE *f;
f=fopen("plik1.txt","r");
fscanf_s(f,"%d",&a);
if((f == NULL))
{
printf("Nie udalo sie otwarcie choc jednego z plikow\n");
exit(-1);
}
double *x1;
double *x2;
x1 = ((double*)malloc(a*sizeof(double)));
x2 = ((double*)malloc(a*sizeof(double)));
for(i=0;i
{
fscanf(f,"%lf%lf%lf%lf",&x1[i],&x2[i],&x1[i+1],&x2[i+1]);
line(x1[i],x2[i],x1[i+1],x2[i+1]);
}
wait();
}[/code]
x1=((double*)malloc(2*a*sizeof(double)));
x2=((double*)malloc(2*a*sizeof(double)));
for(i=0;i
{
fscanf(f,"%lf%lf%lf%lf",&x1[2*i],&x2[2*i],&x1[2*i+1],&x2[2*i+1]);
line(x1[2*i],x2[2*i],x1[2*i+1],x2[2*i+1]);
}[/code]
albo to:
Zaczne od końca, visual studio wskazuje fscanf jako błąd i “radzi” mi wpisywanie fscanf_s, niby program działa tak czy tak ale dla przejrzystości późniejszych raportów błędów wybieram fscanf_s. Jak nie tablicami to czym sczytać wartości z pliku, chciałbym żeby było jak najłatwiej :p. Tablice alokujemy mallociem (przynajmniej tak napisał pan W. Regulski w mojej instrukcji). No i doszedłem do początku jak zrobić żeby funkcja zwracała int. Alex dzięki za podesłanie kodu, ale nawet jak zamienie to i tak mi wywala, problem leży chyba w tym zwracaniu typu zmiennej ale nie wiem jak to narpawic.
Owszem calloc zainicjuje pamięc zerami, oraz zaalokuje n bloków pamięci, malloc natomiast zaalokuje jeden duży blok pamięci. Osobiście zawsze inicjuje zmienne wartościami (najczęściej zerami).
Moim zdaniem tablice najlepiej alokować callociem, a struktury mallociem. Ja tak robię ale oczywiście nie jest to obowiązek.
Z zerowaniem pamięci trafiłeś zaś z blokami - nie. calloc dokładnie jak malloc rezerwuje jeden duży blok pamięci. Więc jedyna różnica to zerowanie, które w tym przypadku jest absolutnie zbędne.
Mój błąd wynikał z tego, że od jakiegoś roku nie pisałem nic w czystym C. A ostatnio właśnie postanowiłem napisać prosty programik właśnie z wykorzystaniem tablic i gdy miałem sporo błędów to zacząłem je poprawiać w tym zamieniając malloc na calloc, wszystkie błędy zniknęły, a ja nieopatrznie zakodowałem sobie że: Jak tablice to calloc Widać błąd był w innych rzeczach i nie zwróciłem na to uwagi.