Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2008, 11:51   #1
Sabonis
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?
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 13:11   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
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.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 13:21   #3
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Non vedo errori nel codice tranne l'uso di una parola chiave come nome di variabile ma per questo basta un qualsiasi compilatore.
forse che il quinto elemento è in posizione 4 mentre quello a cui cerca di accedere sarebbe il sesto elemento?
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 13:42   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
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?
Si, esiste. E' una particolare versione di gcc, chiamato bounds-checking. E' una patch da applicare. Funziona molto bene, rileva sforamenti sia nello stack che nell'heap.

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
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 13:44   #5
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
forse che il quinto elemento è in posizione 4 mentre quello a cui cerca di accedere sarebbe il sesto elemento?
Cavolo hai ragione. Sono troppo abituato a ruby/c#
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 14:07   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Cavolo hai ragione. Sono troppo abituato a ruby/c#
non mi risulta che in C# gli indici degli array partano da 1
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 14:18   #7
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Si, esiste. E' una particolare versione di gcc, chiamato bounds-checking. E' una patch da applicare. Funziona molto bene, rileva sforamenti sia nello stack che nell'heap.

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
Mi servirebbe un tool per il c++!
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 14:32   #8
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Mi servirebbe un tool per il c++!
Mi pare che si possa applicare anche a g++. Prova

E comunque, se programmi in C++, la cosa migliore è usare i vector, che con il metodo at() controllano gli indici nativamente.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 15:28   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Non vedo errori nel codice tranne l'uso di una parola chiave come nome di variabile ma per questo basta un qualsiasi compilatore.
Questa è l'età...

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!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 15:37   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue Guarda i messaggi
E comunque, se programmi in C++, la cosa migliore è usare i vector, che con il metodo at() controllano gli indici nativamente.
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.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 15:37   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Questa è l'età...

Quel codice, se fosse un film, si chiamerebbe...
Il Quinto Elemento!




ok, scappo da solo...
asdasdasdasdasdasdasdasdasd
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2008, 20:07   #12
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da 71104 Guarda i messaggi
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.
In C++ non credo esista altro per controllare gli indici. Quindi mi pare l'unica soluzione praticabile.

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.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2008, 11:44   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue Guarda i messaggi
In C++ non credo esista altro per controllare gli indici. Quindi mi pare l'unica soluzione praticabile.
si può anche scrivere un piccolo template ad hoc, che risulterebbe meglio di vector perché quest'ultima ha un problema: il bound checking lo fa sempre, ma nella build di release è inutile. tra l'altro ribadisco che secondo me è inutile scomodare vector se le dimensioni dell'array sono fisse.

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];
	}

};
non ci vuole niente a scriverlo e risolve il problema meglio di vector.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2008, 19:53   #14
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da 71104 Guarda i messaggi
si può anche scrivere un piccolo template ad hoc, che risulterebbe meglio di vector perché quest'ultima ha un problema: il bound checking lo fa sempre, ma nella build di release è inutile.
Non è vero. Il bound checking il vector lo fa solo se accedi con questa sintassi all'elemento i:

Codice:
vettore.at(i);
Dunque con il metodo at(). Se ci accedi direttamente:

Codice:
vettore(i);
Non fa alcun controllo. Dunque in fase di debug usi at(). In release, togli il metodo e ci accedi direttamente.

Quote:
Originariamente inviato da 71104 Guarda i messaggi
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];
	}

};
non ci vuole niente a scriverlo e risolve il problema meglio di vector.
Beh, a mano puoi fare tutto. Lui chiedeva se c'era un tool che già lo fa. Dunque, a parte il gcc patchato (che non sono sicuro che vada con C++) ed i vector, non c'è nulla

Ultima modifica di Unrue : 13-07-2008 alle 19:55.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2008, 21:11   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Non è vero. Il bound checking il vector lo fa solo se accedi con questa sintassi all'elemento i:

Codice:
vettore.at(i);
Dunque con il metodo at(). Se ci accedi direttamente:

Codice:
vettore(i);
Non fa alcun controllo. Dunque in fase di debug usi at(). In release, togli il metodo e ci accedi direttamente.
su che hai capito benissimo: a parte che l'operatore per l'accesso diretto sono le parentesi quadre, non le tonde, ma a parte quello il metodo at il bound checking lo fa sempre, sia in modalità di debug che di release; e riempire il codice di #ifdef _DEBUG ad ogni singolo accesso al vettore mi sembra eccessivo, così i tempi di scrittura si quintuplicano



Quote:
Beh, a mano puoi fare tutto.
no, a mano non puoi fare tutto: se una cosa non è ragionevole farla non la fai. ma se ti preme il bound checking questa soluzione mi sembra ragionevolissima per quanto poco tempo e quante poche modifiche al codice esistente richiede.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 13:24   #16
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7359
Quote:
Originariamente inviato da 71104 Guarda i messaggi
su che hai capito benissimo: a parte che l'operatore per l'accesso diretto sono le parentesi quadre, non le tonde,
Ah beh, errore colossale.. Non c'è bisogno di rispondere con ironia a fronte di sviste..

Quote:
Originariamente inviato da 71104 Guarda i messaggi
ma a parte quello il metodo at il bound checking lo fa sempre, sia in modalità di debug che di release; e riempire il codice di #ifdef _DEBUG ad ogni singolo accesso al vettore mi sembra eccessivo, così i tempi di scrittura si quintuplicano
Non mi hai capito: io ho detto che il bound checking il vector lo fa con il metodo at, se ci accedi direttamente no. MI pareva di aver scritto chiaro..

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.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 19:54   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Ah beh, errore colossale.. Non c'è bisogno di rispondere con ironia a fronte di sviste..
anima candida, quella la chiami ironia?

ecco, questa è ironia


Quote:
Nessun ifdef nel codice. In debug usi il metodo at, in release lo togli.
appunto... l'ifdef serve a vedere se sei in debug o in release:
Codice:
#ifdef _DEBUG
... vettore.at(i) ...
#else
... vettore[i] ...
#endif

Quote:
Quante milioni di volte lo userai mai nel codice..
e che ne sai, può essere un programma che fa un uso intensivo degli array, tantopiù se gli preme il bound checking.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 07:36   #18
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
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?
La piattaforma e' Windows? In tal caso, hai a disposizione diverse tecniche per riuscire a trovare errori di questo tipo, specialmente se usi Visual...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 08:19   #19
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Quote:
Originariamente inviato da sottovento Guarda i messaggi
La piattaforma e' Windows? In tal caso, hai a disposizione diverse tecniche per riuscire a trovare errori di questo tipo, specialmente se usi Visual...
Si va bene sia per windows che per linux che per mac
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 10:10   #20
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da 71104 Guarda i messaggi
si può anche scrivere un piccolo template ad hoc, che risulterebbe meglio di vector perché quest'ultima ha un problema: il bound checking lo fa sempre, ma nella build di release è inutile.
Eventuali bug spariscono automaticamente ?
__________________
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
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v