|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
[c/c++] strano problema di allocazione memoria su linux
Quote:
alla seconda riga in rosso arriva un bel (anzi brutto E' come se la memoria venisse rilasciata alla fine di ogni funzione e non mi desse la possibilità di tenerla allocata fino a quando non chiamo free o il programma non termina. cosa puo essere? su windows non mi è mai capitato ed è la mia prima volta che programmo su linux e ho sto problema! grazie mille
__________________
http://mamo139.altervista.org |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
può essere che la lunghezza di in_logfile sia maggiore di quella allocata? o che manchi il terminatore in quella stringa? magari puoi usare
Codice:
strncpy(logfile, in_logfile, SERVER_PATHS_SIZE - 1); ps: tutto questo supponendo che la malloc ritorni un valore != NULL, cosa che però non controlli |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Una volta che il controllo e' stato aggiunto e quindi si e' sicuri che la memoria e' effettivamente allocata (se non e' allocata, allora hai trovato il problema che era nascosto dalla blind faith) e si ha il crash, si puo' stampare l'indirizzo di memoria allocato. Deve ovviamente coincidere con quello allocato, altrimenti hai una seconda dichiarazione da qualche altra parte. Fermo restando, ovviamente, quanto detto da tuccio
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12900
|
Quote:
Codice:
void* custom_alloc(size_t size)
{
void* ptr = malloc(size);
if (!ptr)
{
printf("%s\n", "bad allocation");
exit(-1);
}
return ptr;
}
Che poi se si utilizza C++ forse è meglio usare l'operatore new. Comunque dando una rapida occhiata al codice vedo che usi sprintf, questo è un problema perché se la stringa di partenza non ha il terminatore sono guai ed inoltre puoi sforare, ti conviene usare snprintf almeno sai quanto scrivi |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Ok ho risolto il problema rivisitando il modo in cui avevo dichiarato la classe.
Infatti avevo solo allocato con malloc lo spazio per un puntatore alla classe "server". Quindi probabilmente non è mai stato chiamato il costruttore! Grazie a tutti per le risposte, comunque quello che mi avete scritto mi è stato utile per imparare qualcosa in piu.
__________________
http://mamo139.altervista.org |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:57.




















