Débordement de tableaux en cpp

lrocques Messages postés 1 Date d'inscription dimanche 5 septembre 2004 Statut Membre Dernière intervention 6 septembre 2004 - 6 sept. 2004 à 10:10
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 8 sept. 2004 à 10:28
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

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

@+
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
6 sept. 2004 à 18:36
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-)
0
cs_kelly Messages postés 55 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 9 septembre 2004
6 sept. 2004 à 23:56
mmmh l'exemple type de question qu'on ne devrait pas avoir a se poser si on programme proprement :)
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
7 sept. 2004 à 04:59
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 ::.)~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
7 sept. 2004 à 09:15
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-)
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
7 sept. 2004 à 20:30
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 ::.)~
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 sept. 2004 à 08:45
peux tu donner un exemple ne marchant pas avec des classe

éventuellt fonctionnant sous VC6

Merci

Magic Nono: l'informagicien! 8-)
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
8 sept. 2004 à 10:01
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 ::.)~
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 sept. 2004 à 10:28
k

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

merci

++

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous