|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
[C++] _CrtDumpMemoryLeaks
Come mai questa funzione riconosce come memory leak le stringhe costanti?
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
è un evidente controsenso, mica puoi buttarci lì così una domanda del genere
devi dirci tutto il resto; ad esempio, sicuro che i leak indicati si riferissero proprio alle aree di memoria contenenti gli string literals e non invece magari a blocchi allocati nell'heap nel quale tu hai poi ricopiato dei literals (lstrcpy o chi per lei)? PS: a volte mi dispiace di essere pigro: se non lo fossi avrei già buttato giù due righe di codice per una verifica diretta. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
int main()
{
string out0 = "http://www.google.it/";
string out1 = "http://google";
string out2 = "www.google.it";
string out3 = "http://hwupgrade.it";
cout << out0 << endl << out1 << endl << out2 << endl << out3;
_CrtDumpMemoryLeaks();
return 0;
}
Codice:
Detected memory leaks!
Dumping objects ->
{69} normal block at 0x00D81230, 32 bytes long.
Data: <http://hwupgrade> 68 74 74 70 3A 2F 2F 68 77 75 70 67 72 61 64 65
{68} normal block at 0x00D811D0, 32 bytes long.
Data: <http://www.googl> 68 74 74 70 3A 2F 2F 77 77 77 2E 67 6F 6F 67 6C
Object dump complete.
|
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
due osservazioni:
1) non è assolutamente detto che il dump riporti i dati dello string literal; piuttosto riporterà quelli dei buffer interni degli oggetti string (che ti avevo detto? 2) vengono riportati come leak i buffers interni degli oggetti string per un motivo che a me sembra palese: per come funziona std::string essi devono essere allocati dinamicamente, e siccome quegli oggetti non sono ancora stati distrutti (non sono ancora usciti fuori scope) i buffers risultano ancora allocati. prova così: Codice:
int main()
{
{
string out0 = "http://www.google.it/";
string out1 = "http://google";
string out2 = "www.google.it";
string out3 = "http://hwupgrade.it";
cout << out0 << endl << out1 << endl << out2 << endl << out3;
}
_CrtDumpMemoryLeaks();
return 0;
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Mi permetto di "rubare" questo topic: non uso il Visual C++ e di conseguenza non ho a disposizione questa funzione.
Non esiste per windows qualche software come valgrind per controlare ad esempio che la deallocazione delle variabili dinamiche sia eseguita correttamente? Grazie per le dritte
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:18.




















