Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

11

11.01.2008, 10:50

noch immer eine verletzung..

und wcsncpy() nimmt nicht nur 1 argument

C-/C++-Quelltext

1
2
3
4
5
wchar_t *wcsncpy(
   wchar_t *strDest,
   const wchar_t *strSource,
   size_t count 
);


wieso kommt es bei dem beispiel da zu einer zugriffsverletzung? ;_;
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

12

11.01.2008, 11:05

Ohoh sollte auch die wsc-Variante von strlen da hin! (wcslen)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

13

11.01.2008, 11:11

axo.. ja das funzt jetzt..

aber die zugriffsverletzung ist noch immer da..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

14

11.01.2008, 11:20

Auch wenn du mal das wcsncpy(m_lpText, ptr_buffer, 2048); komplett raus lässt? Dann ist der Fehler definitiv nicht in dem Code ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

15

11.01.2008, 11:38

ja, ohne diesem aufruf läuft die funktion fehlerfrei..

aber ich muss den aktuellen string in m_lpText reinkopieren, sonst verhält sich das program nicht korrekt..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

16

11.01.2008, 11:53

Naja hab gerade nachgeguckt. Sollte daran liegen, dass die Funktion kein \0 dranhängt, wenn source String >= die angegebene Anzahl ist ...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Forms::TextBox::AppendText(const wchar_t* const ptr_text)
{
    const std::size_t size(wcslen(ptr_text) + wcslen(m_lpText) + 1);
    wchar_t* ptr_buffer(new wchar_t[size]);

    swprintf(ptr_buffer, size, L"%s%s", m_lpText, ptr_text);

    SetWindowText(m_hwndTextBox, ptr_buffer);

    wcsncpy(m_lpText, ptr_buffer, 2047);
    m_lpText[2047] = 0;
   
    delete [] ptr_buffer;
} // AppendText();
so sollte es jetzt aber gehen ;)

Edit
Da fehlten 2 Klammern beim freigeben!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

17

11.01.2008, 12:26

*räusper*


bis m_lpText[2047} = '0'; kommt das programm nicht, da es sich bei wcsncpy_s(m_lpText, strsize, buffer, strsize); bereits aufhängt..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

18

11.01.2008, 13:22

Liegt aber bestimmt nicht am Code(Hab über 2048 Zeichen reingeworfen (in 10 Durchläufen a 205) und es hat problemlos geklappt. Warum auch nicht? ). Wenn du einfach mal den Code so nutzen würdest wie er da steht würde das gehen. Da steht nix von diesen schäbbigen secure-Variante!

Wobei ... warum speicherst du die Länge in m_lpText und holst dir nicht einfach den Alten Text (GetWindowText | GetWindowTextLength)?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

19

11.01.2008, 13:39

naja.. ob alles was ich mache effektiv ist sei mal dahingestellt ^^

aber ich sag dir, bei mir wirft er mir eine zugriffsverletzung..

visual studio 2005
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

20

11.01.2008, 14:59

Zitat

aber ich sag dir, bei mir wirft er mir eine zugriffsverletzung..


Dann stimmt in der Regel was mit einem Pointer nicht!
Also kanns im Grunde nur an deinem ptr_buffer liegen. Im Grunde genommen muss man den doch gar nicht initialisieren?
swprintf weißt den Pointer doch sowieso neu zu, oder nicht?
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Werbeanzeige