begin process at 2012 02 13 02:50:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[C++]Problème de pointeur ou de liste chainee


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

[C++]Problème de pointeur ou de liste chainee

jeudi 15 janvier 2004 à 00:34:54 | [C++]Problème de pointeur ou de liste chainee

Arkko

Bonjour... J'essaye de convertir une liste chainée du site en une liste chainée demandant comme parametre un new par exemple ajouter(new Test);

Cela fait 2 jours que j'essaye a temps perdu de l'arranger mais cela fonctionne pas quand j'essaye de faire afficher la valeur d'une variable contenu dans la classe test.

First-chance exception at 0x77d2d231 in Spectacle Manager.exe: 0xC0000005: Access violation reading location 0x000000c8.
Unhandled exception at 0x77d2d231 in Spectacle Manager.exe: 0xC0000005: Access violation reading location 0x000000c8.

(la variable "int var" que j'essaye de lire contient 200 donc 0x000000c8 en hexadecimal mais moi je veux pas qu'il stocke une adresse !!! je veux qu'il stocke un int !)

Voici le code de mes fichiers


// -----------------/
// smMain.cpp
// -----------------/


/* Fichier à inclure. */
#include <windows.h>
#include "smListeChaine.h"

/* Prototype de la procédure qui va recevoir les messages envoyer */
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

/* Variables Globales */
/* Handle de la fenêtre que l'on va créée */
HWND hwnd;
/* Instance du programme */
HINSTANCE _hInstance;
/* Nom de la classe que l'on va donner lors de
l'enregistrement de la classe */

const char g_szClassName[] = "SpectacleManager";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{

/* Déclaration des variables */
/* Va contenir les messages */
MSG msg;
/* Va servir pour créé la classe */
WNDCLASSEX wc;

/* Sauvegarde l'instance du programme */
_hInstance = hInstance;

/* Création de la classe */
wc.hInstance = _hInstance; /* Instance du programme */
wc.lpszClassName = g_szClassName; /* Nom de la classe */
wc.lpfnWndProc = WinProc; /* Adresse de la procédure qui va recevoir les messages */
wc.style = CS_DBLCLKS; /* Styles! */
wc.cbSize = sizeof(WNDCLASSEX); /* Taille de la classe(ou struct) */
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Grande icône */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* Petite icône */
wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* Curseur */
wc.lpszMenuName = NULL; /* Menu */
wc.cbClsExtra = 0; /* Optionnel */
wc.cbWndExtra = 0; /* Optionnel */
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); /* Couleur de fond de la fenêtre */

/* Enregistre la classe */
if (!RegisterClassEx(&wc))
return 0; /* En cas d'échec, renvoie zéro(Ferme le programme) */

/* Crée la fenêtre */
hwnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, g_szClassName, "Spectacle Manager - © Copyright Alexandre Langlois",\ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, HWND_DESKTOP, NULL, _hInstance,\ NULL);

/* En cas d'échec, renvoie zéro */
if (hwnd == NULL)
return 0; /* Ferme le programme */

/* Affiche la fenêtre */
ShowWindow(hwnd, CmdShow);
/* Met à jour la fenêtre */
UpdateWindow(hwnd);

/* Tant qu'on recoi des messages, on boucle */
while (GetMessage(&msg, NULL, 0, 0))
{

TranslateMessage(&msg);
DispatchMessage(&msg);

}

/* Fin du programme */
return msg.wParam;

}

void Message()
{
smListeChaine<Test> Liste;
Liste.AjouterElement(new Test);
Liste.AjouterElement(new Test);
Liste.AjouterElement(new Test);
Liste.operator [](1)->variable();
int teste = Liste.operator [](1)->var;
MessageBox(hwnd,(LPCTSTR)teste,"rtitre",MB_OK);

}

/* Procédure qui recoie les messages */
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{

case WM_CREATE:
Message();
break;
/* Lors de la création de la fenêtre */
case WM_DESTROY:

/* Détruit la fenêtre(Optionnel) */
DestroyWindow(hwnd);
break; /* Quitte le switch(important) */

/* Lorsque l'utilisateur ferme la fenêtre via le menu système */
case WM_CLOSE:

/* Envoie un message pour quitter(fermer) le programme */
PostQuitMessage(0);
break; /* Quitte le switch(important) */
/* Par défaut */
default:

return DefWindowProc(hwnd, msg, wParam, lParam); /* Ne pas effacer */
break; /* Quitte le switch(important) */

}

/* Renvoie zéro */
return 0;

}
/* smMain.cpp */

/* Fichier à inclure. */
#include <windows.h>
#include "smListeChaine.h"

/* Prototype de la procédure qui va recevoir les messages envoyer */
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

/* Variables Globales */
/* Handle de la fenêtre que l'on va créée */
HWND hwnd;
/* Instance du programme */
HINSTANCE _hInstance;
/* Nom de la classe que l'on va donner lors de
l'enregistrement de la classe */

const char g_szClassName[] = "SpectacleManager";
int allos = 123;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{

/* Déclaration des variables */
/* Va contenir les messages */
MSG msg;
/* Va servir pour créé la classe */
WNDCLASSEX wc;

/* Sauvegarde l'instance du programme */
_hInstance = hInstance;

/* Création de la classe */
wc.hInstance = _hInstance; /* Instance du programme */
wc.lpszClassName = g_szClassName; /* Nom de la classe */
wc.lpfnWndProc = WinProc; /* Adresse de la procédure qui va recevoir les messages */
wc.style = CS_DBLCLKS; /* Styles! */
wc.cbSize = sizeof(WNDCLASSEX); /* Taille de la classe(ou struct) */
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Grande icône */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* Petite icône */
wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* Curseur */
wc.lpszMenuName = NULL; /* Menu */
wc.cbClsExtra = 0; /* Optionnel */
wc.cbWndExtra = 0; /* Optionnel */
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); /* Couleur de fond de la fenêtre */

/* Enregistre la classe */
if (!RegisterClassEx(&wc))
return 0; /* En cas d'échec, renvoie zéro(Ferme le programme) */

/* Crée la fenêtre */
hwnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, g_szClassName, "Spectacle Manager - © Copyright Alexandre Langlois",\ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, HWND_DESKTOP, NULL, _hInstance,\ NULL);

/* En cas d'échec, renvoie zéro */
if (hwnd == NULL)
return 0; /* Ferme le programme */

/* Affiche la fenêtre */
ShowWindow(hwnd, CmdShow);
/* Met à jour la fenêtre */
UpdateWindow(hwnd);

/* Tant qu'on recoi des messages, on boucle */
while (GetMessage(&msg, NULL, 0, 0))
{

TranslateMessage(&msg);
DispatchMessage(&msg);

}

/* Fin du programme */
return msg.wParam;

}

void Message()
{
smListeChaine<Test> Liste;
Liste.AjouterElement(new Test);
Liste.AjouterElement(new Test);
Liste.AjouterElement(new Test);
Liste.operator [](1)->variable();
int teste = Liste.operator [](1)->var;
MessageBox(hwnd,(LPCTSTR)teste,"titre",MB_OK);

}

/* Procédure qui recoie les messages */
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{

case WM_CREATE:
Message();
break;
/* Lors de la création de la fenêtre */
case WM_DESTROY:

/* Détruit la fenêtre(Optionnel) */
DestroyWindow(hwnd);
break; /* Quitte le switch(important) */

/* Lorsque l'utilisateur ferme la fenêtre via le menu système */
case WM_CLOSE:

/* Envoie un message pour quitter(fermer) le programme */
PostQuitMessage(0);
break; /* Quitte le switch(important) */
/* Par défaut */
default:

return DefWindowProc(hwnd, msg, wParam, lParam); /* Ne pas effacer */
break; /* Quitte le switch(important) */

}

/* Renvoie zéro */
return 0;

}




// -----------------/
// smListeChainee.h (ce fichier contient la liste chainee et aussi la classe test
// -----------------/

#include <tchar.h>

template <class Element>
class smListeChaine
{
public:
smListeChaine();
~smListeChaine();
BOOL AjouterElement(Element* pItem);
BOOL EffacerElement(int nPosition);
BOOL ViderListe();
Element* operator[](int nPosition);

private:
LPVOID GetPtrAt(int nPosition);
struct Liste
{
Element* pElement;
Liste* pSuivant;
};

Liste* pDebut;
Liste* pFin;
int nNbElem;

};

template <class Element>
smListeChaine<Element>::smListeChaine()
{
pDebut = NULL;
nNbElem = 0;
}

template <class Element>
smListeChaine<Element>::~smListeChaine()
{
ViderListe();
}

template <class Element>
BOOL smListeChaine<Element>::AjouterElement(Element* pItem)
{
Liste* pListe = new Liste;

pListe->pElement = pItem;

if(pDebut == NULL)
{
pDebut = pListe;
pDebut->pSuivant = pListe;
}
else
pFin->pSuivant = pListe;

pFin = pListe;
pFin->pSuivant = NULL;

nNbElem++;

return true;
}

template <class Element>
BOOL smListeChaine<Element>::EffacerElement(int nPosition)
{
Liste* pD;
Liste* pT;

if(nPosition == 0)
{
pT = pDebut;
if(pT == NULL)
return false;

pD = pT;
delete pD->pElement;
pT = pT->pSuivant;
pDebut = pT;
}
else
{
pT = (Liste*)GetPtrAt(nPosition - 1);

if(pT == NULL || pT->pSuivant == NULL)
return false;

pD = pT;
pD = pD->pSuivant;

delete pD->pElement;

pT->pSuivant = pD->pSuivant;
}

delete pD;
nNbElem--;

return true;
}

template <class Element>
BOOL smListeChaine<Element>::ViderListe()
{
if (pDebut != NULL)
{
delete[] pDebut;
pDebut = NULL;
nNbElem = 0;
}

return true;
}

template <class Element>
LPVOID smListeChaine<Element>::GetPtrAt(int nPosition)
{
Liste* pT = pDebut;
int i = 0;

if(nPosition < 0 || nPosition >= nNbElem)
return NULL;

while(i < nPosition && pT != NULL)
{
pT = pT->pSuivant;
i++;
}

return pT;
}

template <class Element>
Element* smListeChaine<Element>::operator[](int nPosition)
{
Liste* pT = (Liste*)GetPtrAt(nPosition);
return pT->pElement;
}

class Test
{
public:
int var;
void variable()
{
var = 200;
}
};






Merci de votre aide pour régler ce problème ...
jeudi 15 janvier 2004 à 00:36:51 | Re : [C++]Problème de pointeur ou de liste chainee

Arkko

Oups désole jai mis 2 fois le fichier main ...
jeudi 15 janvier 2004 à 00:41:28 | Re : [C++]Problème de pointeur ou de liste chainee

Arkko

tiens voici le projet pour vous faciliter la vie ;)
[ Lien ]
samedi 17 janvier 2004 à 16:32:08 | Re : [C++]Problème de pointeur ou de liste chainee

Arkko

Aidez moa plz !
dimanche 28 mai 2006 à 16:27:30 | Re : [C++]Problème de pointeur ou de liste chainee

you_ahmed

je besoin de votre aidez ...
pour l'imlementation des listes chainée (uniderectionnelle ou biderectionnelle) telque
les fonction ajouter un element au debut dela,millieu ou la fin de la liste
les fonctions de suppresion aussi bien...ect
enfin je vous remerci.....


Cette discussion est classée dans : int, liste, hwnd, wc, hinstance


Répondre à ce message

Sujets en rapport avec ce message

Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation ouvrir une 2eme fenetre avec editbox et tout et tout, c'est possible? [ par Arnaud16022 ] Hello tout le monde!je voudrais mettre un bouton dans une fenetre (ca c'est facile), mais seulement quand on clique dessus un autre fenetre s'ouvre, a pb avec le plein écran de DirectX que je veux enlever [ par Diabolus ] Bonjour à tous !Je souhaiterai créer une fenêtre en mode normal et tout ce que j'arrive à faire c'est du plein écran. J'aimerai enlever le plein écran dev sans MFC [ par c2millet ] Voilà j'essaie de faire un prog sans MFC et je voudrais changer la couleur de text d'un bouton ainsi que ça couleur de fond.Si qqun peu m'aider mercim Erreur incompréhensible et insoluble pour moi.... [ par jb60 ] Voilà, je vais inscrire le source que j'ai tapé (une partie du source plutôt). J'ai l'impression que tout est correct, mais le compilo me fait une err Application MDI dans une classe [ par PLUiK ] Salut!Je voudrais savoir s'il est possible de coder uneapplication MDI en C++ (en mettant presque tout le codedans la classe):#include //Code de la cl Problème de linker dans programme de base. [ par vith17 ] Bonjour,J'ai tapé le code suivant sous Dev-C++. Lorsque je lance la compilation, il me revoie l'erreur suivante :    [Linker error] undefined referenc tracer une courbe à partir d'un tableau dans une fenêtre [ par jul41 ] Salut! je dois réaliser un projet dont une partie consiste à tracer une courbe caractérisant une force appliquée sur un capteur. J'essaie pour ça de f


Nos sponsors


Sondage...

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 : 2,902 sec (4)

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