Declaration d'un pointeur

dali -  
 dali81 -
onjour tout le monde,

j'ai écrit un code qui permet de generer un vecteur aleatoire d'entiers entre 1 et 10, mais ça fonctionne pas je pense a cause de la declaration du pointeur :

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>

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

int i,buffer,position;
int *p;
*p=0;

for(i=0;i<10;i++)
{
*(p+i)=i+1;
}

for(i=0;i<10;i++)
{
position=random()%10;
buffer=*(p+i);
*(p+i)=*(p+position);
*(p+position)=buffer;
}

for(i=0;i<10;i++)
printf("%i ", *(p+i));

return EXIT_SUCCESS;
}

2 réponses

SKZ81
 
Oui c'est normal...

int *p;

Là tu dis que p est un pointeur. Mais un pointeur sur quoi ? Qu'est-ce qu'une flèche sans cible ???

Bref, il faut que le pointeur pointe vers une zone mémoire. Pas trop le choix, deux solutions.
- Soit c'est un pointeur qui sert à manipuler une zone mémoire existante (ex : j'ai un pointeur qui pointe en début de liste, et je veux me balader dans la liste sans perdre l'origine).

- Soit c'est un pointeur qui est destiné à gérer une nouvelle zone mémoire à par entière, l'exemple de ton tableau de 10 éléments est parfais.

Dans le deuxième cas, il faut que tu demande au système un bout de mémoire.
Celà se fait par la fonction malloc().

Tu veux 10 éléments, ses éléments sont des entier ?
Alors il faut que tu réserve, auprès du système, un bloc mémoire de 10 fois la taille d'un entier.
En C, on écrit :
malloc( 10 * sizeof(int) );

Et les choses sont bien faites puisque malloc te renvoit un pointeur, qui pointe vers la zone mémoire alloué.

il faut donc écrire

int *p = malloc( 10*sizeof(int) );

Et AINSI p pointe vers un tableau de 10 éléments entiers.

OK ? Si il n'y a pas d'autre erreur, ton code devrais rouler comme ça.
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
int *p = (int*)malloc(10*sizeof(int))

++
0
dali81
 
merciiiiiiiiiiiiii;

ça marche, je connaissais pas cette commande
0