begin process at 2010 02 10 15:19:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Addition sur pointeurs


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Addition sur pointeurs

mercredi 30 avril 2008 à 13:16:25 | Addition sur pointeurs

CCJ

Membre Club
Bonjour.
Je cherche actuellement a determiner la taille d'un tableau. J'ai donc ecrit le petit bout de code suivant :

template <class T> long SizeofArray(T * data)
{
    long reg;
    reg = 0;
    while(*data != 0)
    {
        data += sizeof(T);
        reg++;
    }
    return reg;
}

J'ai testé avec des chaines de type char de la maniere suivante :

char msg[] = "<HTML>En construction</HTML>";
std::cout << "Taille : " << SizeofArray<char>(msg) << std::endl;

Pas de probleme cela me retourne bien 28.
Cependant lors d'un test similaire avec un tableau d'entier quelques problemes sont apparut

int test[6];
test[0]=123;
test[1]=456;
test[2]=789;
test[3]=741;
test[4]=852;
test[5]=963;

std::cout << "Taille : " << SizeofArray<int>(test) << std::endl;

La le resultat est aleatoire.
J'ai constaté que , avec des char, l'addtion de l'adresse du premier element avec la taille fonctionne correctement mais avec des int , au lieu d'ajouter la taille qui est de 4 oct, cette fonction ajoute 16 , ce qui decale forcement tout et finit par faire pointer data en dehors de la variable.

Voici un exemple de ce que j'obtiens :

Resultat pratique (nombre de decalage: addresse pointée) :
0: 0xbfa367c0
1: 0xbfa367d0
2: 0xbfa367e0
3: 0xbfa367f0
4: 0xbfa36800

resultat théorique (nombre de decalage: addresse pointée):
0: 0xbfa367c0
1: 0xbfa367c4
2: 0xbfa367c8
3: 0xbfa367cc
4: 0xbfa367d0

S'il vous plait !

Si l'informatique été de l'alcool il y aurait des genies partout
mercredi 30 avril 2008 à 13:52:08 | Re : Addition sur pointeurs

SAKingdom

Membre Club
Réponse acceptée !
Bien sûr que ça fonctionne avec une chaine de caractère. Une chaine de caractère se termine par un 0 de fin de chaine.
Cependant, un tableau de int (ou BYTE ou DWORD etc.) NE PEUT se terminer par une quelconque valeur puisque, justement, il peut toutes les prendre. Un 0 peut très bien se situer en plein milleu du tableau.

Il est impossible de déterminer la longueur d'un tableau (sauf une chaine de caractère) à partir d'un pointeur

C++ (@++)

mercredi 30 avril 2008 à 13:55:44 | Re : Addition sur pointeurs

CCJ

Membre Club
Ok merci beaucoup :)
Petite question au passage , si on ne peut pas avec un pointeur , on peut autrement ?

Si l'informatique été de l'alcool il y aurait des genies partout
mercredi 30 avril 2008 à 14:04:57 | Re : Addition sur pointeurs

SAKingdom

Membre Club
Réponse acceptée !
Non. On peut faire un sizeof cependant, il retournera la taille total du tableau (sur un tableau seulement, pas sur un pointeur) et non la taille du nombre d'éléments "présents" (car justement, il est impossible de déterminer si une case a une valeur ou non).

C++ (@++)

mercredi 30 avril 2008 à 14:10:50 | Re : Addition sur pointeurs

CCJ

Membre Club
OK merci encore
mercredi 30 avril 2008 à 14:33:27 | Re : Addition sur pointeurs

CCJ

Membre Club
Ah mais quel boulet suis-je ><.
Le probleme de debordement en question (16 au lieu de 4) vennai de fait que l'incrementation de pointeur prend en compte le type de pointeur ...

Voila deux problemes , deux solutions :O

Si l'informatique été de l'alcool il y aurait des genies partout


Cette discussion est classée dans : taille, test, data, char, reg


Répondre à ce message

Sujets en rapport avec ce message

test sur variable de type char [ par enrageur ] j'aimerais indetifier des mots dans un fichier txt. J'ouvre le fichier et je le copy dans un char (data). Ensuite je fais un test pour voir si les deu question d'allocation probleme char char* Question simple [ par youpiyoyo ] voici mon probleme://///////////////////////////////////////////////////int rec = recv(ns,buffer,64*sizeof(char),0); buffer[rec] = '\0' ; //cout problème d'execution!!! [ par theidiot ] Bonjours,je suis débutant en programmation et je suis présentement dans l'apprentissage des tableaux dynamiques.J'ai fait un carnet d'adresse(avec les pb d'allocation memoire pour des tableaux char [ par kollibar ] bonjour, j ai un pb sur le code suivant(imprime le handle et le nom de toutes les fenetres active a l'écran) au niveau des variables char * titre et c crash (mémoire ?) [ par remzz ] Bonjour,Je cherche à construire un tableau de grande taille, mais à partir d'une certaine taille le programme crashe :double test[500][500];=> OK doub Copy de char * [ par Tidam ] Voila en gros une partie de mon prog :char * phrase [5];char *test = new char [50];...strcpy(phrase[2],test);Et le programme plante. Le probleme est p Une Class et des Char ... [ par Tidam ] Vala j'ai un petit probleme avec ma source :class Test{public: Test (char initialName[15]); char LireName() const { return wName; } void DefName (char Taille d'une structure en mémoire [ par PeteTheBull ] Bonjour J'ai un petit problème en c++ (sous VC++6). Je défini une structure du style : typedef struct     {         __int64 B;       &nbsp mettre un texte dans une textBox [ par typhoun ] Ca ne doit pas être très compliqué mais je ne vois pas comment faire pour mettre un texte dans une textBox et pour qu'il s'affiche correctement:char* Switch et char [ par Stoomm ] Bonjour,Si j'ai :char test[10];strcpy (test, "monchar ";Si je souhaite faire un switch : Je fais comment ???switch (test){...}Il aime pas ! Quelqu'un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,574 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales