IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème d'interprétation de code / Array de pointers


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chef de Projets Digitaux (Santé)
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de Projets Digitaux (Santé)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut Problème d'interprétation de code / Array de pointers
    Bonjour,

    J'ai décidé de me lancer dans une formation en ligne dans le langage C car j'ai découvert la programmation en bidouillant d'abord sur Excel en VBA et je me suis rendue compte que j'adore ça !

    Je débute tout juste et je dois me débrouiller seule car ce sont juste des cours en ligne avec des évaluations à chaque fin de chapitre. En rentrant les programmes des tests sur Code::Blocks pour contrôler les réponses que j'avais données, je me suis aperçue que j'ai commis une erreur sur un exo d'un des tests mais n'ayant aucun corrigé et après m'être retournée la tête, avoir fouillé dans les cours et avoir regardé les tutos et FAQ du site, je ne parviens toujours pas à comprendre mon erreur. C'est sans doute tout bête mais je fais un blocage et j'espère que l'un d'entre vous pourra m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
    	int i,j;
    	int **p = (int **)malloc(2 * sizeof(int *));
    	p[0] = (int *)malloc(2 * sizeof(int));
    	p[1] = p[0];
    	for(i = 0; i < 2; i++)
    		for(j = 0; j < 2; j++)
    			p[i][j] = i + j;
    	printf("%d",p[0][0]);
    	return 0;
    }
    Pour moi, cela devrait afficher 0 mais en réalité cela affiche 1. Je pense que la raison se trouve dans le p[1]=p[0] mais je ne parviens pas à l'expliquer.

    Pouvez-vous m'aider ?

    Merci beaucoup !

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    L'erreur est là

    Tu dis que p[1] se trouve à l'adresse p[0], donc quand tu modifies p[1], tu remodifies p[0]

    Refais un malloc pour p[1] et n'oublie pas de vérifier que les allocations se passent bien et de libérer en fin de programme avec free (bonnes habitudes à prendre).

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chef de Projets Digitaux (Santé)
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de Projets Digitaux (Santé)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    L'erreur est là

    Tu dis que p[1] se trouve à l'adresse p[0], donc quand tu modifies p[1], tu remodifies p[0]

    Refais un malloc pour p[1] et n'oublie pas de vérifier que les allocations se passent bien et de libérer en fin de programme avec free (bonnes habitudes à prendre).

    Donc c'était bien là. Comme j'avais dissocié le "avant-boucle" et le "après-boucle", je n'avais pas intégré que les modifications apportées par la boucle étaient impactées par cette ligne. C'était vraiment très bête. Désolée et merci beaucoup !

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Je ne sais pas quel était l'énoncé de cet exercice mais puisque tu remplis tes tableaux dans des boucles alors autant les malloc-er et les free-er de la même manière, non ? Se restreindre à une procédure d'accès pour un même objet permet de plus facilement reconnaître ce type d'erreur.

    Profites-en pour factoriser les informations de taille de tableau dans des constantes, ou mieux : les récupérer depuis les arguments de main.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Chef de Projets Digitaux (Santé)
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de Projets Digitaux (Santé)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut Merci pour vos réponses
    Merci beaucoup pour vos réponses.
    Maintenant que je les ai, je me sens un peu bête mais il faut bien débuter !... Je m'accroche.

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Il n'y a pas de question bête tant qu'elles sont le résultat d'un véritable effort de compréhension.

    Accroche-toi en effet. Le C est parfois brutal mais c'est un vrai pote, dans le sens où il ne va pas prendre de pincettes pour te calmer de suite si tu commences à dériver..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Sockets : problème d'un exit code d'un array
    Par elliotg dans le forum Free Pascal
    Réponses: 5
    Dernier message: 10/03/2011, 15h05
  2. [Debugger] Problème de traçage de code
    Par vinny_the_true dans le forum MFC
    Réponses: 2
    Dernier message: 19/12/2005, 00h21
  3. interprété du code stocké en base de donnée
    Par namosis dans le forum MFC
    Réponses: 7
    Dernier message: 14/11/2005, 22h06
  4. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07
  5. Interprétation de code dynamiquement
    Par Smeuuh dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 29/09/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo