Mesaje recente

Members
Stats
  • Total Posts: 17,786
  • Total Topics: 1,234
  • Online today: 302
  • Online ever: 318
  • (17 October 2024, 13:29)
Users Online
Users: 0
Guests: 241
Total: 241

Cum pot modifica MALLOC_CHECK_?

Started by BiThian, 29 November 2006, 21:47

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BiThian

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.
"A man who would not die for something is not fit to live." - Martin Luther King

kman

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.

BiThian

Mersi, kman. Vad ca mai am multe de invatat.

PS: De ce nu-mi pot edita posturile?
"A man who would not die for something is not fit to live." - Martin Luther King

kman

Pentru ca userii normali nu-si pot edita posturile decat pana la o ora dupa ce au postat prima data.