blad w djgpp ??

0

Czy mi sie wydaje czy tu rzeczywiscie jest bląd ??

Standardowo do przydzielania pamieci sluzy malloc, a pamiec jest zwalniana za pomoca free. Do zmiany wielkosci juz istniejącego wskaznika słuzy realloc. I tu jest problem. Djgpp dziala w pmode tak więc możliwe jest przydzielenie więcej niż 64kb pamieci na jeden wskaznik i rzeczywiscie wpisanie: ptr = malloc(999999) zadziala, ale tak samo powinno dziac sie jezeli uzyje się realloc :

ptr = malloc(10);
ptr = realloc(999999);

  • to juz nie kce dzialac mimotego ze powinno. Sprawdzilem i okazalo sie ze za pomoca realloc mozna maksymalnie przydzielic 0xFFFF - 16 bajtow...
    To jest blad w djgpp czy nie ??
0

A spróbuj najpierw zaalokować >640kB a potem to reallocować... Chociaż to bez sensu...

0

dziala ale tylko wtedy gdy realloc bedzie mniejsze niz te 0xFFFF - 16; poza tym za pomoca malloc w djgpp moge zaalokowac kilkadziesiąt MB nawet :P

0

„fuckt”, realloc() nie działa… jak to możliwe żeby tak podstawowa funkcja nie działała?

na jakiej wersji gcc sprawdzałeś? Ja mam 3.2.1 (chyba stara…)

0

Sprawdzilem znow, i okazalo sie ze w przypadku gd chodzi o rozmiary pamieci nie wieksze nic 0xFFFF - 16 realloc dziala bez zarzutu, natomiast jezeli w gre wchodzi kilkaset kb to realloc dziala tylko wtedy gdy nowy rozmiar bedzie mniejszy niz to co bylo zaalokowane za pomoca malloc, jezeli chce aby zwiekszyl rozmiar pamieci to krzaczy program... ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1