SayIT
Software => Programare => Topic started by: BiThian on 29 November 2006, 21:47
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_):
$ export MALLOC_CHECK_=1
Pentru alte variabile de mediu (sper ca am tradus bine) cum ar fi HOSTNAME, codul C merge.
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.
Mersi, kman. Vad ca mai am multe de invatat.
PS: De ce nu-mi pot edita posturile?
Pentru ca userii normali nu-si pot edita posturile decat pana la o ora dupa ce au postat prima data.