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

MFC Discussion :

[MFC] Problème Release/Debug


Sujet :

MFC

  1. #21
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Salut,

    J'ai fait d'autres tests et plus simples pour cerner le problème.

    J'en arrive au fait que même les 2 lignes suivantes dans le corps d'une méthode font planter l'appli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int *p=NULL;
    p=(int*)malloc(sizeof(int));
    Je ne peux même pas tester le retour de p.
    Le msg d'erreur me dit que l'instruction à l'adresse x ne peut pas écrire dans la zone mémoire à l'adresse 0x00000000000000.

    C'est une classe que j'ai importé d'un autre projet ( développé avec MingW Developper Studio ), que je n'ai pas crée avec VC++. J'ai juste fait "Ajouter un *.h et *.cpp" dans mon projet, rien de plus. Est-ce que ça peut venir de là ?

  2. #22
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ça ne veut rien dire tout ça ...
    qui me dit que l'objet qui appel cette méthode n'est pas null ou foireux ?, que l'environnement avant cet appel n'est pas déjà corrompu?
    une ligne de code peut être correcte, mais si le contexte d'appel est pourri ça
    plantera.
    Il est quand même préférable en C++ d'utiliser new à la place de malloc..

  3. #23
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Le malloc à la place du New, c'était pour illustrer..

    L'objet lui,est correct puisqu'avant de lui faire allouer la mémoire,
    je lui fais afficher une MessageBox().

    En Release/Static Library, je rappelle que ça fonctionne.

    Depuis le début de la discussion, la question devient en fait:

    Est-ce qu'il y a une différence de la gestion mémoire entre la Static Library et la Shared DLL au niveau Release, et si oui, comment lui faire faire en Shared DLL ce qu'il arrive à faire en Static Library, avec des options de link ou de préprocesseur, que sais-je encore ?

    Voilà.

  4. #24
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    je t'ai déjà répondu à ce sujet , la réponse est non cela fonctionne de la même manière .
    un probléme peut survenir dans le cas que j'ai cité:
    Citation Envoyé par farscape Voir le message
    salut,
    la crt : console runtime library s'occupe entre autre des allocations mémoire : new ,free ,malloc etc..
    http://msdn2.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx

    le fait d'utiliser des versions différentes de cette bibliothèque dans un programme cause des problèmes si par exemple un module essaye de libérer de la mémoire allouée par un autre module crt...
    exemple : une chaine passée en argument dans un dll qui libère le pointeur.
    si les deux modules n'utilisent pas la même crt ça plantera...
    tu dois commencer par vérifier ce point.

  5. #25
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Salut,

    Comment puis-je savoir que j'utilise différentes versions de CRT ?
    Qu'est ce qui a pu faire que j'utilise des versions différentes de cette sans l'avoir voulu explicitement ?
    Comment y remédier, est-ce que c'est dans "Project/settings" que ça se paramètre ?
    Est-ce que c'est un *.lib qui se met dans le répertoire des sources au moment du "Build" ?

Discussions similaires

  1. Réponses: 17
    Dernier message: 12/08/2010, 15h30
  2. [VC++6][MFC][DLL] Différence Release/Debug ?
    Par ben_popcorn dans le forum MFC
    Réponses: 6
    Dernier message: 07/08/2006, 12h40
  3. [MFC]Problème Version Release
    Par jagboys dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2005, 07h45
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31

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