SayIT

Software => Programare => Topic started by: BiThian on 29 November 2006, 21:47

Title: Cum pot modifica MALLOC_CHECK_?
Post by: BiThian on 29 November 2006, 21:47
Code (c) Select

int main()
{
char* test;
putenv("MALLOC_CHECK_=1");
test=(char*)malloc(10*sizeof(char));
free(test);
free(test);
exit(0);
}

Desi variabila MALLOC_CHECK_  pare a fi modificata (am afisat tot environ-ul  ;;) ) , programul se termina fortat (este apelata abort). Nu acelasi lucru se intampla, daca inainte de a-l rula, setez din shell MALLOC_CHECK_):
Code (bash) Select

$ export MALLOC_CHECK_=1

Pentru alte variabile de mediu (sper ca am tradus bine) cum ar fi HOSTNAME, codul C merge.
Title: Re: Cum pot modifica MALLOC_CHECK_?
Post by: kman on 29 November 2006, 21:56
Problema ta nu este de setare a variabilei ci de momentul in care se face evaluarea ei.
Valoarea variabilei MALLOC_CHECK_ e verificata o singura data de catre glibc la incarcarea in memorie a programului tau, cand se seteaza starea interna a glibc-ului, dupa aceea se foloseste aceasta stare si nu valoarea din variabila de mediu.
Presupunerea mea e ca aceasta setare de stare interna se face in momentul in care linker-ul (ld-linux.so.2) incarca in memorie programul tau si initializeaza toate librariile link-ate dinamic. Asta e doar o presupunere, dar din experimentul tau se pare ca asa se si intampla, daca cineva are mai multe cunostinte in acest domeniu il rog sa ne lamureasca.
Title: Re: Cum pot modifica MALLOC_CHECK_?
Post by: BiThian on 30 November 2006, 10:00
Mersi, kman. Vad ca mai am multe de invatat.

PS: De ce nu-mi pot edita posturile?
Title: Re: Cum pot modifica MALLOC_CHECK_?
Post by: kman on 30 November 2006, 10:43
Pentru ca userii normali nu-si pot edita posturile decat pana la o ora dupa ce au postat prima data.