Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [C++]Problème de pointeur ou de liste chainee [ Archives / Au secours ] (Arkko)

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
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é 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.