|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 82
|
[c++] Tool per errori con la memoria
Mi sapete consigliare qualche buon tool per scoprire errori di memoria come memory leak, buffer overflow etc?
Valgrind è molto buono ma non trova errori di questo tipo: int static[5]; int main(void) { int stack[5]; static[5] = 0; stack [5] = 0; return 0; } Esiste qualche tool che possa trovare errori di questo genere? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Non vedo errori nel codice tranne l'uso di una parola chiave come nome di variabile ma per questo basta un qualsiasi compilatore.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Quote:
__________________
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6851
|
Quote:
Dopo che hai scaricato la patch: http://sourceforge.net/project/showf...group_id=88372 Compila con -fbounds-checking. L'unica cosa è che non so se funziona anche con C++. ma tanto il codice che hai scritto è C |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#7 | |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 82
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6851
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() Quel codice, se fosse un film, si chiamerebbe... Il Quinto Elemento! ok, scappo da solo...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
mah, non credo che valga la pena di usare i vector per un problema del genere; i vantaggi di vector sono altri, ma se si tratta di usare un array di dimensioni note e fisse usare vector non è certo meglio che usare qualche sistema per il controllo degli errori di memoria.
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6851
|
Quote:
Neanche Valgrind prende quegli errori purtroppo. E poi non è detto che lui debba lavorare solo con array a dimensioni fisse Un'alternativa più spinta è compilare ll codice da controllare con il gcc patchato con bounds checking e tutto il resto passarlo al compilatore c++. Però non l'ho mai fatto e sinceramente non so neanche se sia fattibile. Ultima modifica di Unrue : 12-07-2008 alle 20:13. |
|
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
questo è un template che ho scritto or ora e che potrebbe rimpiazzare gli array normali: Codice:
template<typename _Type, int _Size>
class CheckedArray
{
private:
_Type Data[_Size];
public:
inline _Type &operator [] (unsigned int Index)
{
assert(Index < _Size);
return Data[_Size];
}
};
|
|
|
|
|
|
|
#14 | ||
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6851
|
Quote:
Codice:
vettore.at(i); Codice:
vettore(i); Quote:
Ultima modifica di Unrue : 13-07-2008 alle 19:55. |
||
|
|
|
|
|
#15 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6851
|
Quote:
Quote:
Nessun ifdef nel codice. In debug usi il metodo at, in release lo togli. Quante milioni di volte lo userai mai nel codice.. Ultima modifica di Unrue : 14-07-2008 alle 13:27. |
||
|
|
|
|
|
#17 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() ecco, questa è ironia Quote:
Codice:
#ifdef _DEBUG ... vettore.at(i) ... #else ... vettore[i] ... #endif Quote:
|
|||
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#19 |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 82
|
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:20.












non mi risulta che in C# gli indici degli array partano da 1









