begin process at 2012 02 10 08:39:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Probleme avec new


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

Probleme avec new

vendredi 26 mai 2006 à 15:21:24 | Probleme avec new

BumpMANN

Membre Club
Bonjour!

J'ai un probleme tres etrange et j'aimerai savoir si quelqu'un a deja eu un probleme de ce genre, ou a une piste pour le resoudre.
Je programme avec Visual Studio 2003 pro, et je programme un mmorpg. Pour pouvoir avoir plusieurs persos j'utilise une liste chainée de classes de persos. Voila la fonction qui permet de recupérer un perso soit non utilisé, soit d'en créer un nouveau si les autres sont utilisés:

    CPerso *CPerso::List_GetFree()
    {
        CPerso *ls;
        if(Root==NULL)
            return NULL;

        for(ls = Root; ls != NULL && ls->used != false; ls = ls->Next);

        if(ls!=NULL)
            return ls;


//        exit(5);
        CPerso *nper = new CPerso;
//        exit(5);
        List_Add(nper);
        return nper;
    }

Le bug etrange maintenant, c'est que quand je lance le programme en mode debuggage (F5 sur vs) il n'y a pas de probleme, je peux etre a 3 sur la meme map (j'ai pas essayé plus). En revanche si je lance l'exe, ca plante, meme si le deuxieme exit(5) est decommenté. Si je decommente le premier exit(5), il n'y a pas de probleme, ca quitte le prog sans bug. Donc j'en ai deduit que c'est le new...

Je pensais que le new plantait que s'il n'avait pas assez de mémoire libre, mais la c'est bizarre.. (puisqu'avec f5 ca marche nikel, et la mémoire utilisée est stable)

Quelqu'un a une idée ?
vendredi 26 mai 2006 à 15:34:11 | Re : Probleme avec new

bouba

Slt, quel est le code de ta classe CPerso, le constructeur en particulier ?


vendredi 26 mai 2006 à 16:04:51 | Re : Probleme avec new

BumpMANN

Membre Club
CPerso::CPerso()
{
    Img = new CNVOImage;
    m_TileSetRect = new SNVORect[25];
    State = PSTATE_WALK;
    Move = 0;
    id = 0;
    for_right = 0;
    for_left = 0;
    for_up = 0;
    for_down = 0;
    to_x = 0;
    to_y = 0;
    Next = NULL;
    used = false;
    Arg1 = 0;
}

CPerso::~CPerso()
{
    delete Img;
    delete[25] m_TileSetRect;
}

Le code est un peu gros je met que le constructeur et destructeur ...
vendredi 26 mai 2006 à 16:20:42 | Re : Probleme avec new

bouba

Le constructeur à l'air OK, si les constructeurs CNVOImage et SNVORect le sont aussi ça devrait être bon. Par contre tu as essayé en mettant un exit() après le List_Add ? Comment sont gérées tes listes ? Ca arrive qu'un prog ne plante pas en debug mais plante en release, le truc c'est que tu accèdes à des zones mémoires où tu ne devrais pas accéder. Vérifies nickel les constructeurs de CNVOImage et SNVORect, ensuite faits un test en créant style 200 CPerso pour voir (en désallouant correctement), je ne suis pas sûr que le problème vienne du new.






vendredi 26 mai 2006 à 17:39:11 | Re : Probleme avec new

BumpMANN

Membre Club
Hmm... ya un peu de nouveau :/ j'avais oublié de mettre un destructeur pour CNVOImage donc je l'ai rajouté... mais maintenant ca bug avec f5, au meme endroit, mais plus precisément dans le constructeur de CNVOImage, au new de m_pTexture = new LPDIRECT3DTEXTURE9[MULTITEX_MAX]; qui renvoie un pointeur nul. (juste pour le new du CPerso en question puisqu'il charge d'autres images avant et les affiche sans probleme).
Avant d'avoir fait ca j'ai essayé de rajouter un tableau de 200 CPerso et ca marchait bien en debug.

struct SNVORect
{
    float x1, y1;
    float x2, y2;

    SNVORect(float _x1, float _y1, float _x2, float _y2) { x1=_x1;y1=_y1;x2=_x2;y2=_y2; }
    SNVORect() {}
};



//-----------------------------------------------------------------------------
// Nom:  CNVOImage::CNVOImage()
// Desc: Construit la classe
//-----------------------------------------------------------------------------
CNVOImage::CNVOImage()
{
    m_pTexture = new LPDIRECT3DTEXTURE9[MULTITEX_MAX];
    ZeroMemory(m_pTexture,sizeof(LPDIRECT3DTEXTURE9)*MULTITEX_MAX);
    ScaleCenter = D3DXVECTOR3(0, 0, 0);
    ScaleRotation = D3DXVECTOR3(0, 0, 0);
    Scale = D3DXVECTOR3(1, 1, 1);
    RotationCenter = D3DXVECTOR3(0, 0, 0);
    Rotation = D3DXVECTOR3(0, 0, 0);
    Position = D3DXVECTOR3(0, 0, 0);
    m_cullstate = CS_UNKNOWN;
    m_pCullInfo = NULL;
    m_vecBoundsLocal = new D3DXVECTOR3[8];
    instance = false;
}



//-----------------------------------------------------------------------------
// Nom:  CNVOImage::~CNVOImage()
// Desc: Detruit la classe
//-----------------------------------------------------------------------------
CNVOImage::~CNVOImage()
{
    if(!instance)
    {
        delete[MULTITEX_MAX] m_pTexture;
        delete[8] m_vecBoundsLocal;
    }
}



vendredi 26 mai 2006 à 17:48:26 | Re : Probleme avec new

BumpMANN

Membre Club
encore pire... j'ai retiré ma modif avec instance (et ca a remarché), et j'ai juste remis bool instance; dans ma classe et hop ca plante ^^;;;
vendredi 26 mai 2006 à 18:47:39 | Re : Probleme avec new

BumpMANN

Membre Club
Réponse acceptée !
dsl pour le triple posting mais ya encore du nouveau... pire que tout... Voila la classe CNVOImage:

//-----------------------------------------------------------------------------
// Nom:  class CNVOImage
// Desc: Contient une image et ses fonctions d'affichage.
//-----------------------------------------------------------------------------
class CNVOImage

{
public:
    CNVOImage();
    ~CNVOImage();

    LPDIRECT3DVERTEXBUFFER9    m_pVB;
    LPDIRECT3DDEVICE9        m_pd3dDevice;

    D3DXVECTOR3 ScaleCenter;
    D3DXVECTOR3 ScaleRotation;
    D3DXVECTOR3 Scale;
    D3DXVECTOR3 RotationCenter;
    D3DXVECTOR3 Rotation;
    D3DXVECTOR3 Position;

    DWORD m_dwWidth;
    DWORD m_dwHeight;

//    bool instance;
   
    CULLINFO* m_pCullInfo;

    D3DXVECTOR3  *m_vecBoundsLocal;     // bounding box coordinates (in local coord space)
    D3DXVECTOR3  m_vecBoundsWorld[8];   // bounding box coordinates (in world coord space)
    D3DXPLANE    m_planeBoundsWorld[6]; // bounding box planes (in world coord space)
    CULLSTATE    m_cullstate;            // whether object is in the view frustum

    LPDIRECT3DTEXTURE9*        m_pTexture;

    inline LPDIRECT3DTEXTURE9 GetTexture(int iIndex) { return m_pTexture[iIndex]; }

    void GetWorldMatrix(D3DXMATRIX* matWorld);
    HRESULT Instantiate(CNVOImage *psrc);
    HRESULT SetSrcRect(SNVORect *rcSrc);
    HRESULT SetDestRect(SNVORect *rcDest);
    HRESULT SetSize(float fWidth, float fHeight);
    HRESULT SetColor(DWORD dwColor, int iCorner = 0);
    HRESULT LoadImage(LPDIRECT3DDEVICE9 pDevice, char *pcFilename, SNVOImgLoadFlag *sLoadflag);
    HRESULT LoadTexture(LPDIRECT3DDEVICE9 pDevice, char *pcFilename, int iIndex = 0);
    HRESULT MakeNormalMap(WORD iIndex);
    HRESULT SetCamera(CNVOCamera *Cam);
    HRESULT Draw();
    HRESULT PreDraw();
    HRESULT PostDraw();
};

en gros comme ca ca marche, si je decommente instance ca plante, mais si je change par exemple DWORD m_dwWidth en WORD en plus, ca remarche! C'est pas possible qu'une classe bug a l'octel pret comme ca >_<;;; Avec un compteur static j'arrive avec 68 images chargées... (61 en comptant les déchargées)

Ah! je viens de changer un truc là... j'ai viré le menu ingame (c'est pas moi qui l'ai fait, c'est mon pote ) et je suis descendu a 4 images (chargées - déchargées)... vais lui demander d'optimiser ca puisque maintenant debug et exe marchent ^^

bon ben merci pour ton aide bouba ^^

(sujet clos?)


Cette discussion est classée dans : programme, probleme, exit, ls, cperso


Répondre à ce message

Sujets en rapport avec ce message

Probleme urgent !! [ par julnad ] Mon problème est que j'ai réalisé un programme en C et qu'il faut le traduire en C++. L'important est qu'il faut le faire rapidement et le C++ c'est p Probleme sur un programme qui calcule un pgcd [ par El loco ] Voila j ai un probleme sur le programme suivant, il marche correctement avec une grande serie de nombres mais quand je tape 15 et 32 il me donne un pg probleme bizarre [ par tcok ] salut a tous,voila je poste un message sur ce forum parce que je confronter a un probleme extrement bizarre qui depasse mes connaissance.g fait un pet Comment recup l'instance du programme... [ par neodelphi ] Salut tout le monde ! Ayant déja trouvé de l'aide sur ce forum j'y refait un tour ( je commence a y prendre gout lol ).Bon voila mon probleme : j'ai c probleme pour deposer un programme [ par nolius ] j'ai programmer un quakelike que je voudrais ajouter sur ce site. a cahque fois que j'essaye de l'ajouter je tombe sur une page d'erreur.est ce que c' Probleme en C :/ [ par ChrisFactor ] Voila je fait une formation par le biais de l'etat, et dans ce qu'ils m'apprenne beaucoup de probleme se pose, j'ai comme programme Microsoft C++ et D Probleme avec le programme de resolution systemes [ par ldespi ] Bonjour,je suis vraiment trés interessé par le programme developpé par White_angel 73 au sujet de la résolution d'un systeme d'equation par les method SVP aidez moi à finir ce programme [ par morgandetoi06 ] #include "windows.h"#include int main(){HWND hparent;HWND hfille;hparent=FindWindow("IMWindowClass",NULL);hfille=GetDlgItem(hparent,1);UN:HWND GetNext VS.NET 2003->probleme fstream [ par supergrey ] Bonjour, jai depuis quelques temps VS2003 et je n'arrive pas a transférer mes programme développés avec VC++6.Voila l'erreur::error C2065: 'ofstream'  Probleme Visual C++ 6 [ par supergrey ] Bonjour, j'ai fait un programme a partir de la source d'un sniffer et mon programme fonctionne seulement en mode debogage (sous VC++6).Comment est-ce


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,529 sec (3)

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