Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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: 6851
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: 6851
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: 6851
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: 6851
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: 6851
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
DDL PMI, stop alle false recensioni: le ...
Classifiche JustWatch marzo: Una battagl...
iPhone Fold a rischio ritardo: problemi ...
Artemis II: raggiunto il punto più...
LG OLED e Hisense QLED da 85'' e 98'': s...
DJI Mini 5 Pro Fly More Combo a 862€: se...
Roborock Saros 10R a 899,99€: uno dei mi...
Samsung dice addio alla sua app Messaggi...
Moto G86 5G, Xiaomi Redmi 15, POCO X7 Pr...
Outlook Classic, risolto il bug delle em...
Netflix lancia Playground, una nuova app...
SpaceX lancerà i nuovi Pelican Ge...
Amazon Haul: -25% sul primo ordine con i...
Windows 11: Microsoft promette (ancora u...
NVIDIA non può più usare il suo stesso t...
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: 10:50.


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