On Mi, 2003-01-15 at 18:39, Mihnea-Costin Grigore wrote:
>      :-/ De ce? Te rog argumenteaza... mie nu mi se pare asa o "greseala
> imensa" - ma rog, nu vorbesc de C++, doar de C.

Memory leaks.  Buffer overflows.  Etc etc.

Documenteaza-te inainte, ca doar impresiile nu isi au locul.  Si
vorbesti doar din impresii... C++ nu are probleme de alocare a memoriei
atita timp cit e C++ (si nu un oarecare cu prostul obicei de a combina C
cu C++).  Si in cazul asta, programarea de la scoala nu prea ajuta.

>      Evident, numai ca sunt situatii cand nu stii, sau nu "vrei" sa stii
> (poate la un moment dat vreau sa transmit ca parametru o lista lunga de
> pointer-i catre diferite zone de memorie, daca trebuie sa trimit si
> dimensiunile ocupate se dubleaza necesarul de memorie si timpul pentru
> transmiterea datelor... si daca fac asta de multe ori pe secunda, iti dai
> seama ca este mai convenabil sa citesc informatia care deja exista acolo
> printr-o functie libc).

Trebuie sa stii tot timpul cit si unde.  Altfel se cheama crappy
programming si vine de la necunoasterea unor reguli de baza sau de la
lucrat prea multe ore fara pauza.

>      Pai stiu asta, numai ca nu am reusit sa-mi dau seama daca el retine
> pe undeva si valoarea "exacta" ceruta de apel, sau doar pe cea care o

Daca ceri o valoare, poti sa o stochezi undeva.  Pentru ca regula in C
este -1 pentru failed function.  Atita vreme cit result != -1 ramine
valabil cit i-ai dat.  Toate functiile din familia *alloc lucreaza cu
blocuri _continue_ de memorie.  Punctul de start il ai in pointer (si nu
il uiti niciodata pina la eliberarea cu succes a memoriei) si lungimea
vectorului o ai de cind ai zis ca vrei (sau de la redimensionarea
incheiata cu succes).

Acum, hai sa te gindesti logic un moment - asta e functie (nu procedura
de pascal).  Deci introduci un numar N de parametrii, primesti un
rezultat.  Daca inceputul vectorului este dat (altfel nu ai putea lucra
cu spatiul alocat), unde mai e loc de dimensiune?

> aloca. Oricum, o astfel de functie exista - numai ca este nedocumentata,
> si limitata la sistemele cu glibc 2.x - se numeste "malloc_usable_size(p)"

Numele zice "usable".  End of story.

>      Ce m-ar interesa pe mine este o metoda _portabila_ pentru a rezolva
> problema asta...

malloc (daca scrii in C) verificat pentru erori de programare cu mai
multe biblioteci pentru debug/leaks.

---
Pentru dezabonare, trimiteti mail la 
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/


Raspunde prin e-mail lui