Program mi wywala błąd.
Załącznik:
blad.png
Poniżej część kodu - całość w załączniku poniżej.
Wczytanie pliku mam powiązane z menu 'Open', zapis z 'Save as'. Przy zapisie tworzy mi plik o wybranej nazwie, zapisuje w nim 'zawartosc' i wywala błąd. O co mu chodzi?
Kod:
struct MenuItem *item=ItemAddress(menu, Code);
if (Code==FULLMENUNUM(0, 0, NOSUB))
{
FileReq(ASLHailRead, ASLOKTextRead);
if (BadaniePliku()==NULL)
{
printf("Nie udalo sie wczytac pliku.\n");
}
else
{
OpenFile();
}
}
if (Code==FULLMENUNUM(0, 3, NOSUB))
{
FileReq(ASLHailWrite, ASLOKTextWrite);
WriteFile();
}
Kod:
static int BadaniePliku(void)
{
BPTR check;
struct FileInfoBlock *fib;
if (fib=AllocVec(sizeof(struct FileInfoBlock), MEMF_PUBLIC))
{
if (check = Lock(plik, SHARED_LOCK))
{
printf("Plik %s zostal zablokowy dla innych.\n", plik);
if(Examine(check, fib))
{
rozmiar = fib->fib_Size;
printf("Plik %s ma rozmiar %d bajtow.\n", plik, rozmiar);
}
else
{
PrintFault(IoErr(), "Examine");
FreeVec(fib);
return 0;
}
UnLock(check);
}
else
{
PrintFault(IoErr(), plik);
FreeVec(fib);
return 0;
}
FreeVec(fib);
}
else
{
PrintFault(ERROR_NO_FREE_STORE, "AllocMem - Examine");
return 0;
}
}
static int OpenFile(void)
{
BPTR in;
if (in = Open(plik, MODE_OLDFILE)) //otwarcie pliku
{
if (zawartosc=AllocVec(rozmiar, MEMF_PUBLIC))
{
if ((read = Read(in, zawartosc, rozmiar))==-1)
{
PrintFault(IoErr(), "Blad odczytu");
FreeVec(zawartosc);
Close(in);
return 0;
}
else
{
printf("Ilosc przeczytanych bajtow %d\n", read);
}
// FreeVec(zawartosc);
}
else
{
PrintFault(ERROR_NO_FREE_STORE, "AllocMem - open file");
Close(in);
return 0;
}
}
else
{
PrintFault(IoErr(), "Otwarcie pliku");
return 0;
}
Close(in);
}
static int WriteFile(void)
{
BPTR out;
if (out = Open(plik, MODE_NEWFILE))
{
if ((write = Write(out, zawartosc, rozmiar))==-1)
{
PrintFault(IoErr(), "Blad zapisu");
FreeVec(zawartosc);
Close(out);
return 0;
}
else
{
printf("Ilosc zapisanych bajtow %d\n", write);
}
FreeVec(zawartosc);
}
else
{
PrintFault(IoErr(), "Otwarcie pliku - zapisz jako");
return 0;
}
Close(out);
}