Erreur memoire

Signaler
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
18
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
2 février 2009
-
alors voila, j'ai jamais vu ca.

je lance mon programme. normal. puis je clique sur le bouton generer et là, pouf !
un message d'erreur. alors, celui la, c'en est un specimen !!!!!

levoila :

"l'instruction a "0x00403fda" emploie l'adresse mémoire "0x0000000". la memoire ne peut pas etre "written".

appuyez sur OK pour quitter
appuyez sur Annulez pour deboguer".

vala, il est joli, hein ? surtout l'adresse "0x0000000"...

n'empeche que je sais pas comment on resoud ca et d'ou ca vient ?

mon code :

#include <stdAfx.h>
#include <windows.h>
#include <commctrl.h>
#include <time.h>
#include <stdlib.h>
#include "resource.h"

int k1,k2,k3,k4;
char *buffer,*buffer1,*buffer2,*buffer3;

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
int nCmdShow;
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case ID_GEN:

srand((unsigned) time(NULL));
k2 = rand() % 99999;

srand((unsigned) time(NULL));
k4 = rand() % 99999;

srand((unsigned) time(NULL));
k1 = rand() % 9999;

k3 = (k2-k4)+k1;

itoa(k1,buffer,10);
itoa(k2,buffer1,10);
itoa(k3,buffer2,10);
itoa(k4,buffer3,10);

SetDlgItemText(hDlg,IDC_K1,buffer);
SetDlgItemText(hDlg,IDC_K2,buffer1);
SetDlgItemText(hDlg,IDC_K3,buffer2);
SetDlgItemText(hDlg,IDC_K4,buffer3);

break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);

if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

3 réponses

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

A priori tu as mis un NULL quelque part où il fallait un pointeur valide (d'où l'adresse 0x0000000).

Si tu bosses sous VC++, le mieux est de compiler le prog en mode Debug et de lancer le programme sous le debugger.
Messages postés
13
Date d'inscription
lundi 24 juin 2002
Statut
Membre
Dernière intervention
29 décembre 2002

ton erreur peut venir de la fonction atoi, mais le plus simple pour le savoir c'est encore de faire un debuf step by step
Messages postés
18
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
2 février 2009

tes pointeurs buffers ne sont pas initialises, il faut leurs allouer la memoire ( malloc ) ou utiliser des tableaux d'environ 20 caract. chacun

Bonne chance!