Programm stürzt bei zweiten Funktionsaufruf ab
Von: , Frage gestellt am Mo, 18. Jan 2010
Hallo,
Ich habe eine mir zwei Funktion zusammengesucht, leider eine dieser 2 beim zweiten Aufruf löst Windows eine Haltepunkt aus, was beim starten ohne Debugger das bekannte "Problembericht senden" Fenster anzeigen lässt.
Der Code der ersten Funktion:
int GetProcess(Prozess *Prozesse, int Max)
{
PROCESSENTRY32 pe32 = { 0 };
HANDLE hSnapshot = NULL;
HINSTANCE hDll = LoadLibrary("kernel32.dll");
pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First");
pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next");
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
int proc_cnt=0,thrd_cnt=0;
if(Max == 0)
{
if (hSnapshot != (HANDLE) -1)
{
pe32.dwSize = sizeof (PROCESSENTRY32);
if (pProcess32First (hSnapshot, &pe32))
{
do
{
proc_cnt++;
}
while(pProcess32Next (hSnapshot, &pe32));
}
CloseHandle (hSnapshot);
}
return proc_cnt;
}
else
{
if (hSnapshot != (HANDLE) -1)
{
pe32.dwSize = sizeof (PROCESSENTRY32);
int proc_cnt=0,thrd_cnt=0;
if (pProcess32First (hSnapshot, &pe32))
{
do
{
proc_cnt++;
sprintf(Prozesse[proc_cnt].Name, "%s\0", pe32.szExeFile);
Prozesse[proc_cnt].Process = ::OpenProcess(PROCESS_TERMINATE, 0, pe32.th32ProcessID);
Prozesse[proc_cnt].ID = proc_cnt;
Prozesse[proc_cnt].LengthName = strlen(Prozesse[proc_cnt].Name);
cout<<pe32.szExeFile<<endl;
}
while(pProcess32Next (hSnapshot, &pe32));
}
CloseHandle (hSnapshot);
}
return 0;
}
}
und die Zweite:
bool SendProcess(int socket)
{
Prozess *Prozesse=0;
int size=0;
int rec=0;
void *Buffer=malloc(sizeof(int));
int Anzahl = GetProcess(NULL, 0);
int buf=0;
char *cBuffer=(char*)malloc(sizeof(char)*256);
if(Anzahl > 0)
{
size = Anzahl*sizeof(Prozess);
cout << size << "\n" << Anzahl << "\n";
Prozesse = (Prozess*)malloc(size);
}
send(socket, (char*)&size, sizeof(int), 0);
rec = recv(socket, (char*)Buffer, sizeof(int), 0);
memcpy(&buf, Buffer, sizeof(int));
if(rec <= SOCKET_ERROR || buf != 1)
{
return false;
}
else
{
GetProcess(Prozesse, Anzahl);
for(int i=0; i<=Anzahl; i++)
{
cout << Prozesse[i].Name << endl;
sprintf(cBuffer, "%s\0", Prozesse[i].Name);
send(socket, cBuffer, sizeof(char)*256, 0);
cout << "senden\n";
ZeroMemory(Buffer, sizeof(int));
rec = recv(socket, (char*)Buffer, sizeof(int), 0);
memcpy(&buf, Buffer, sizeof(int));
cout << buf << "\n";
if(rec <= SOCKET_ERROR || buf != 1)
{
return false;
}
}
Prozesse = NULL;
cBuffer = NULL;
Buffer = NULL;
return true;
}
}
Hoffe mir kann jemand helfen, den ich kapiert nicht was da nicht funktioniert.
Gruß Michael
