C++ Debug Assertion Failed

09/11/2011 13:59 Klemens102#1
Moin Leute,

ich bin gerade dabei mir einen Hardware ID Generator
zu schreiben, ich mache das über die Serien Nummer der
Festplatte. Zum Test wollte ich mir jetzt einmal die
Seriennumer in einem Label ausgeben, wenn ich die erstellte
Form starte und auf Start klicke, erhalte ich folgende Fehlermeldung:

[Only registered and activated users can see links. Click Here To Register...]

Hier die Source:

void GetSerialNumber(char *sDevice, char *Serial)
{
DWORD SerialNum;
GetVolumeInformationA(NULL, NULL, NULL, &SerialNum, NULL, NULL, NULL, NULL);
sprintf(buffer,"%d",SerialNum);
label1->Text = Convert::ToString(*buffer);
return;

}

Ich hoffe jemand kann mir helfen.

Gruß
//localhost
09/11/2011 14:06 SmackJew#2
"Please Retry to debug the application", daran schon mal gedacht?

Zum Code: Woher kommt buffer? Und warum übergibst du "ToString" nur ein char? Kann mir kaum vorstellen, dass 'ne Methode die "ToString" heißt nur ein char bekommt.
09/11/2011 14:13 Klemens102#3
Quote:
Originally Posted by SmackJew View Post
"Please Retry to debug the application", daran schon mal gedacht?

Zum Code: Woher kommt buffer? Und warum übergibst du "ToString" nur ein char? Kann mir kaum vorstellen, dass 'ne Methode die "ToString" heißt nur ein char bekommt.
Ich hab jetzt schon öfters Debuged.
Hab es auch schon im release versucht, da beendet sich das Programm dann halt ohne Fehlermeldung.

Der Buffer ist oben decladiert.

char HDD3[200];
char *disk = " :\\";
char Disk = 'c';
char *buffer;
09/11/2011 14:20 SmackJew#4
Quote:
Originally Posted by //localhost View Post
Ich hab jetzt schon öfters Debuged.
Offenbar nicht erfolgreich. Was macht man wenn man scheitert? Nochmal probieren und dies mal richtig gucken und nachdenken.

Mit dem Crash hat das wahrscheinlich nichts zu tun, aber das hier:

Code:
label1->Text = Convert::ToString(*buffer);
wird dir genau 1 char liefern.

Zum Debuggen: Wenn du mit dem VS Debugger nicht zurecht kommst, nimm den den du lieber magst. Olly z.B.. Desweiteren ist der Fehler in sprintf.c, wahrscheinlich hat es also mit sprintf zu tun.
09/11/2011 15:57 Klemens102#5
Quote:
Originally Posted by SmackJew View Post
Offenbar nicht erfolgreich. Was macht man wenn man scheitert? Nochmal probieren und dies mal richtig gucken und nachdenken.

Mit dem Crash hat das wahrscheinlich nichts zu tun, aber das hier:

Code:
label1->Text = Convert::ToString(*buffer);
wird dir genau 1 char liefern.

Zum Debuggen: Wenn du mit dem VS Debugger nicht zurecht kommst, nimm den den du lieber magst. Olly z.B.. Desweiteren ist der Fehler in sprintf.c, wahrscheinlich hat es also mit sprintf zu tun.
Hast du einen Vorschlag, wie ich das besser machen könnte ?

Code:
label1->Text = Convert::ToString(*buffer);
09/11/2011 16:24 SmackJew#6
Quote:
Originally Posted by //localhost View Post
Hast du einen Vorschlag, wie ich das besser machen könnte ?

Code:
label1->Text = Convert::ToString(*buffer);
[Only registered and activated users can see links. Click Here To Register...]
09/12/2011 23:36 Klemens102#7
Quote:
Originally Posted by SmackJew View Post
[Only registered and activated users can see links. Click Here To Register...]
Damit habe ich es ja schon versucht,
allerdings kriege ich es nicht auf die Reihe :/

Gibt es noch weitere Vorschläge ?
09/13/2011 08:46 MrSm!th#8
Um dir mal nen Tipp zu geben, was er meint:
Lass das Sternchen weg, du übergibst schließlich so nur einen char und keinen String, weil du mit * den char* dereferenzierst.

Desweiteren: allozierst du überhaupt genügend Speicher? Ich sehe eine Deklaration von buffer, aber keine Speicherallokation!
Da ist nochmal Grundlagenwiederholung angesagt ;O

Oh und lass diesen .NET Form Dreck weg, der hat nichts in C++ zu suchen! Nimm lieber reind C++ Frameworks für GUIs, wobei die am Anfang ohnehin mehr schaden als nutzen.

Oh und eine HWID über GetVolumeInformation ist nicht besonders sicher.
09/13/2011 09:42 Klemens102#9
Quote:
Originally Posted by MrSm!th View Post
Um dir mal nen Tipp zu geben, was er meint:
Lass das Sternchen weg, du übergibst schließlich so nur einen char und keinen String, weil du mit * den char* dereferenzierst.

Desweiteren: allozierst du überhaupt genügend Speicher? Ich sehe eine Deklaration von buffer, aber keine Speicherallokation!
Da ist nochmal Grundlagenwiederholung angesagt ;O

Oh und lass diesen .NET Form Dreck weg, der hat nichts in C++ zu suchen! Nimm lieber reind C++ Frameworks für GUIs, wobei die am Anfang ohnehin mehr schaden als nutzen.

Oh und eine HWID über GetVolumeInformation ist nicht besonders sicher.
Danke, deine Antwort hat mir geholfen.
Ich hatte vor einem Jahr Pause mit C++ gemacht und möchte das jetzt wieder als einstiegsprojeckt nutzen. Wie würdest du eine Hardware ID generieren?