Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/02/2013, 09h31   #1
darkwall_37
Membre éclairé
 
Homme Alex V
Etudiant administrateur systèmes et réseaux
Inscription : octobre 2007
Messages : 609
Détails du profil
Informations personnelles :
Nom : Homme Alex V
Âge : 24
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant administrateur systèmes et réseaux

Informations forums :
Inscription : octobre 2007
Messages : 609
Points : 378
Points : 378
Par défaut Affichage int* / int** identique

Bonjour,

J'ai une drôle d'erreur.
J'affecte en retrour un int * à une fonction qui renvoit un int ** et il arrive quand même à me l'afficher correctement. Même si ça compile, je devrais avoir une belle erreur de Windows à l’exécution.
Je ne trouve pas d'explication.

Je link le projet car il y a trop de lignes de codes.

Volontairement, j'ai enlevé des '*'. Mais ça s’exécute normalement quand même.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdlib.h>

#include "allocate.h"
#include "deallocate.h"
#include "display.h"
#include "create_da.h"
#include "destroy_da.h"
#include "logger.h"

int main()
{
    logger_on();

    int s=allocate_1D_i(10);
    display_1D_i(s,10,"1D");
    deallocate_1D_i(s);

    unsigned long long int *t = allocate_2D_ulli(3,3);
    display_2D_ulli(t,3,3,"2D");
    deallocate_2D_ulli(t,3);

    unsigned long long int *u = allocate_3D_ulli(3,3,3);
    display_3D_ulli(u,3,3,3,"3D");
    deallocate_3D_ulli(u,3,3);

    t_1Di *da1 = create_1D_i(10);
    destroy_1D_i(da1);

    t_2Di *da2 = create_2D_i(5,5);
    destroy_2D_i(da2);

    t_3Di *da3 = create_3D_i(3,3,3);
    destroy_3D_i(da3);

    logger_off();
    return 0;
}
Merci encore
Fichiers attachés
Type de fichier : rar LIBRARY.rar (61,5 Ko, 5 affichages)
__________________
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
darkwall_37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 12h52   #2
Ngork
Membre chevronné
 
Homme
Auditeur informatique
Inscription : avril 2009
Messages : 118
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Auditeur informatique
Secteur : Finance

Informations forums :
Inscription : avril 2009
Messages : 118
Points : 650
Points : 650
Cela compile certes, mais avec un nombre considérable de warnings !
En compilant ton projet tel quel avec tes options, gcc me renvoie 93 warnings, et si je modifie les trois variables comme dans ton exemple, j'obtiens 108 warnings ...

Maintenant, pour répondre strictement à ta question, cela marche quand même parce qu'un pointeur est codé comme un entier.
Par exemple, sachant que allocate_1D_i(n) renvoie un pointeur sur un entier :
int *s=allocate_1D_i(10) est une écriture correcte qui ne déclenche aucun warning, alors que int s=allocate_1D_i(10) est une écriture incorrecte qui déclenche un warning, toutefois, s étant un entier, il est à même de recevoir un pointeur (qui est de fait un entier), puis lorsque tu écrit display_1D_i(s,10,"1D") alors que le premier argument attendu devrait être un pointeur sur un entier et non un entier, cela déclenche un autre warning car le type n'est pas bon, mais cela fonctionne tout de même car l'entier passé (s) sera interprété comme un pointeur.

Donc, tu as autant de warnings qu'un sapin a de boules brillantes et de guirlandes, mais ton code passe quand même ... pour l'instant !
Ce n'est pas une raison pour ne pas chasser chacun de tes warnings, car un warning qui traîne est un bug potentiel ...
__________________
<< Il n'est pas dans Ses intentions de tout faire, ni donc de nous dépouiller de notre libre-arbitre et de cette poignée de gloire qui nous appartient. >> (Le Prince, Nicolas Machiavel)
Ngork est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2013, 13h36   #3
darkwall_37
Membre éclairé
 
Homme Alex V
Etudiant administrateur systèmes et réseaux
Inscription : octobre 2007
Messages : 609
Détails du profil
Informations personnelles :
Nom : Homme Alex V
Âge : 24
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant administrateur systèmes et réseaux

Informations forums :
Inscription : octobre 2007
Messages : 609
Points : 378
Points : 378
OKay merci. Avant j'étais persuadé que ce genre d'erreurs auraient fait planter le programme.

Concernant les warnings, ce sont normalement des erreurs dans les printfs duent aux formats d'affichage. Notamment les long double et autres. Je n'arrive as à trouver les formats adéquats.

Cordialement
__________________
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
darkwall_37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 18h12   #4
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 383
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 383
Points : 32 020
Points : 32 020
Envoyer un message via MSN à Médinoc
Il n'y a pas de format adéquat sous MinGW pour les long double, parce que MinGW utilise le printf() de la CRT Microsoft, et la taille de long double diffère entre les deux compilos.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h59.


 
 
 
 
Partenaires

Hébergement Web