Débordement de tableaux en cpp

Signaler
Messages postés
1
Date d'inscription
dimanche 5 septembre 2004
Statut
Membre
Dernière intervention
6 septembre 2004
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Hello,

Je souhaiterais détecter des débordements de tableaux en cpp sous visual-C6. Quels sont les différents outils ou options qui existent pour cela?

Merci.

lrocques

9 réponses

Messages postés
122
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
27 février 2007
1
Un outil genial: BoundsChecker, j'utilise que ca tout le temps...!!!

@+
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
simple tu fais une classe en vérifiant tes allocations / affectations...
en POO, bien proguée, js de PB

Giz> BoundsChecker ne ralentit po trop le sys???
dis ns en plus....

Magic Nono: l'informagicien! 8-)
Messages postés
55
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
9 septembre 2004

mmmh l'exemple type de question qu'on ne devrait pas avoir a se poser si on programme proprement :)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Tout à fait mais, si tu as peur de déborder, garde la taille des tes tableaux dans une variable X et tu y fais référence au besoin

Sinon, si tu as plusieurs tableaux de même type par exemple, tu peux très bien utiliser une petite structure dans ce genre:

typedef struct T_MonArray {
int * m_Array;
size_t m_Size;
T_MonArray(){m_Size=0;m_Array=0;}
}MonArray;

MonArray arr;

arr.m_Array = new int[ 100 ]; // 100 éléments
if ( arr.m_Array ) arr.m_Size = 100; // il y à 100 item dedans

for ( index = 0; index < arr.m_Size; index++ ) {

arr.m_Array[ index ] = valeur;
// ...

}

Ou même avec une class comme M. nono à dit ou encore rendre le tout généric et faire un petit template ...

~(.:: NitRic ::.)~
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
NitRic> ui
petite précision, meme si c'est ds la norme C++,

encore actuellement, pr faire un template, il faut une classe....

++

Magic Nono: l'informagicien! 8-)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

template ne va pas obligatoirement avec class

Ce que je voulais dire exactement c'est qu'il pourait ce faire une simple class ou encore un template(class template) pour rendre le tout généric ...

~(.:: NitRic ::.)~
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
peux tu donner un exemple ne marchant pas avec des classe

éventuellt fonctionnant sous VC6

Merci

Magic Nono: l'informagicien! 8-)
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

un exemple de template sans class !?
demandez et vous receverez qu'il disait

Fait juste pour toi à l'instant même :)

/**************************************************/

#include
#include <ctime>
#include <cstdio>
using namespace std;

#define _MAX_ARRAY_SIZE 30
#define _WAIT()\
puts( "Press Enter to continue ...\n" );\
getc( stdin )

template<typename T>
void GenericBubbleSort( T *& array, size_t max_size ) {

T t_val;

for ( size_t i = 0; i < max_size-1; i++ ) {

for ( size_t a = i+1; a < max_size; a++ ) {

if ( array[ a ] < array[ i ] ) {

t_val = array[ i ];
array[ i ] = array[ a ];
array[ a ] = t_val;

}

}

}

}

template<typename T>
void GenericPrintArray( T *& array, size_t max_size ) {

for ( size_t i = 0; i < max_size; i++ )
cout << "Item " << i << ": " << array[ i ] << endl;

}

int main( int argc, char * argv[] ) {

size_t i = 0;
size_t a = 0;
int * int_array = NULL;
double * dbl_array = NULL;
char ** str_array = NULL;

srand( time( NULL ) );

int_array = new int[ _MAX_ARRAY_SIZE + 1 ];
if ( !int_array ) {
cout << "new failed ..." << endl;
return 0;
}

for ( ; i < _MAX_ARRAY_SIZE; i++ )
int_array[ i ] = ( ( rand() % 1234 ) + 1 );

GenericBubbleSort( int_array, i );
GenericPrintArray( int_array, i );

if ( int_array ) delete [] int_array;

_WAIT();

dbl_array = new double[ _MAX_ARRAY_SIZE + 1 ];
if ( !dbl_array ) {
cout << "new failed ..." << endl;
return 0;
}

for ( i = 0; i < _MAX_ARRAY_SIZE; i++ )
dbl_array[ i ] = (double) ( ( rand() % 1234 ) + 1 );

GenericBubbleSort( dbl_array, i );
GenericPrintArray( dbl_array, i );

if ( dbl_array ) delete [] dbl_array;

_WAIT();

str_array = new char *[ _MAX_ARRAY_SIZE + 1 ];
if ( !str_array ) {
cout << "new failed ..." << endl;
return 0;
}

for ( i = 0; i < _MAX_ARRAY_SIZE; i++ ) {

str_array[ i ] = new char[ 26 + 1 ];

for ( a = 0; a < 26; a++ )
str_array[ i ][ a ] = ( 97 + ( (rand() % 25) + 1 ) );

str_array[ i ][ a ] = '\0';

}

for ( i = 0; i < _MAX_ARRAY_SIZE; i++ ) {

GenericBubbleSort( str_array[ i ], 26 );
GenericPrintArray( str_array[ i ], 26 );

if ( str_array[ i ] ) delete [] str_array[ i ];

}

delete [] str_array;

cout << endl << "End ..." << endl << endl << flush;
return 0;

}

/**************************************************/

~(.:: NitRic ::.)~
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
k

j'en aV entendu parlé,
je ne saV po que CT implémenté

merci

++

Magic Nono: l'informagicien! 8-)