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

1

26.02.2009, 22:03

[Erledigt] void* zu int*

hallo, ich habe einen thread erstellt und ihm als Parameter die Adresse eines integers übergeben. So:

C-/C++-Quelltext

1
CreateThread(NULL, 0, ClientTransfer, &test, 0, &ClientThreadIds[test]);


jetzt möchte ich in dem Thread den Wert des Integers haben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
DWORD WINAPI ClientTransfer(LPVOID pParameters)
{
    while(true)
    {
        std::cout<<*pParameters;
        Sleep(1);
    }

    return 0;
}


Das funktioniert aber nicht, ungültige Dereferenzierung!
Ich habe schon verschiedene casts versucht, die aber alle nicht funktioniert haben. Außerdem habe ich die Adresse des Zeigers mit der Originaladresse verglichen. Die Adresse stimmt. Ich möchte eigentlich nur den Wert dieser Adresse. Wieso funktioniert das nicht?[/code]

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

2

26.02.2009, 22:05

Re: void* zu int*

Du musst dem Compiler ja auch sagen, dass es ein int sein soll:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
DWORD WINAPI ClientTransfer(LPVOID pParameters)
{
    while(true)
    {
        std::cout<<*((int*)pParameters);
        Sleep(1);
    }

    return 0;
}


Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

3

26.02.2009, 22:11

wenn ich das mache kompiliert er das zwar, gibt allerdings einen falschen Wert aus, obwohl die Adresse stimmt!?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

26.02.2009, 22:17

kanns sein dass test ne lokale variable im andren thread is die zu dem zeitpunkt da sie im thread ausgegeben wird schon zerstört wurde?

5

26.02.2009, 22:19

So ist es, darauf wäre ich wohl nie gekommen. vielen Dank für eure Hilfe

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

6

26.02.2009, 22:46

Nur noch ein kleiner Hinweis: Wenn du schon C++ programmierst, dann verwende auch C++-Casts (in dem Fall static_cast), die C-Casts sind in C++ afaik deprecated.
<< an dieser Stelle ist eine Signatur verstorben >>

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

26.02.2009, 23:35

Zitat von »"the[V«

oid"], die C-Casts sind in C++ afaik deprecated.

Die C-Casts sind ganz bestimmt nicht deprecated..

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

27.02.2009, 09:25

aber die C++ casts sind aussagekräftiger, und in gutem C++ code sind casts eigentlich eh eher selten anzutreffen ;)

(da oben is der cast schon ok, da gehts eh nicht anders...)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

27.02.2009, 09:49

Zitat von »"dot"«

aber die C++ casts sind aussagekräftiger, und in gutem C++ code sind casts eigentlich eh eher selten anzutreffen ;)

(da oben is der cast schon ok, da gehts eh nicht anders...)


Das stimmt schon zweimal nicht. C Casts machen C++ Code nicht schlecht und im obigen Code hätte auch ein static_cast den gewünschten Erfolg gebracht. :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

27.02.2009, 10:17

Ich hab nicht gesagt dass C Casts C++ Code schlecht machen, lediglich dass in gutem C++ Code Casts allgemein eher rar sind, der Cast da oben aber so schon passt...

Werbeanzeige