int_to_wchar* - wirft nach einigen erfolgreichen durchläufen exceptions ??
-
HI folgendes problem
[cpp]WCHAR* CUtilitys::int_to_wcharp(int number) { char numberstring[255]; string buffer; _itoa_s(number, numberstring,sizeof(numberstring), 10); buffer = (string)numberstring; g_pLogfile->Textout(RED,buffer.c_str()); int i; WCHAR* result; result = (WCHAR*)malloc(sizeof(buffer)+1); for (i = 0; buffer[i] != 0; i++) { result[i] = buffer[i]; //<<<< plötzlich (nach 19 oder 12 aufrufen) ist result ein BadPointer } result[i] = 0; return result; }[/cpp]
mit folgendem Fehlern
First-chance exception at 0x7c92b3fb in BacteriaView.exe: 0xC0000005: Access violation reading location 0x00090020. First-chance exception at 0x0045f30a in BacteriaView.exe: 0xC0000005: Access violation writing location 0x00000000. Unhandled exception at 0x0045f30a in BacteriaView.exe: 0xC0000005: Access violation writing location 0x00000000.
hat das etwas damit zutun das ich den Speicher nicht "free()" und wenn jemand schon dabei ist das zu lesen .. wie soll ich free() anwenden ? (es stösst sich ja mit "return")
mfg Birdspider
-
- free() müsstest du in dem Code anwenden, aus dem du diese Funktion aufruftst.
- malloc() und free() sind C - benutze doch besser new und delete
- Ich kann mir nicht vorstellen, dass nach 20 Durchläufen dein Speicher voll ist
Du kannst aber versuchen zu testen, ob malloc() geklappt hat und nur dann deine Schleife durchlaufen.
-
result = (WCHAR*)malloc([b]sizeof(buffer)[/b]+1);
wohl eher nicht. woher kommt eigentlich diese sizeof-mania im zusammenhang mit strings?
-
@birdspider: Da du anscheinend ein Windows-Programm schreibst, verwende doch direkt _itow, anstatt erst in einen char* und dann in wchar_t* umzuwandeln.
-
_itow ist einge gute idee thx ..
soda ich werde jetzt einmal das rudherum erläutern, ist vllt doch besser
eine directX-DrawText funktion will den text als LPCWSTR ergo WCHAR* haben (DX funzt hab schon taxt in allen möglichen varianten drauf gehabt)
ich habe 3 int werte die ich mit textbeschreibungen wie strings (oder auch anders) zusammen schnipseln möchte
int A,B,C;
A=3;
B=4;
C=5;so nun folgende umschreibung des problems->
(WCHAR*)output = L"TEXT1: " + A + L" TEXT2: " + B + L" TEXT3: " + C; --->bsp "Kugeln: 45 Würfel: 2 Punkte: 245"
im grunde geht es also um convertierung, formatierung und schlussendlich ein WCHAR* wo alles enthalten sein soll