|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|