Accueil > Forum > > > > [C++]Problème de pointeur ou de liste chainee
[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
|
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
Livres en rapport
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|