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

SkryptForFun

Frischling

  • »SkryptForFun« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

1

12.12.2010, 16:29

DeleteListData - Sinn?

Hallo

Ich bastle mir gerade mein erstes vollständiges DirectX-Projekt und benutze als Vorlage die TriBase-Engine. Als ich mir mal den Konfigurationsdialog angeschaut habe stiess ich auf DeleteListData. Der Sinn dieser Funktion zum löschen aller Inhalte einer Combobox ist mir nicht klar.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
tbResult DeleteListData(HWND hDlg, int iDialogItem) 
{ 
int iNumElements; 
void* pElementData; 
  
// Anzahl der Listenelemente abfragen 
iNumElements = (int)(SendDlgItemMessage(hDlg, iDialogItem, CB_GETCOUNT, 0, 0)); 
if(iNumElements == CB_ERR) return TB_ERROR; 
// Alle Elemente durchgehen 
for(int iElement = 0; iElement < iNumElements; iElement++) 
{ 
// Daten des Elements abfragen und freigeben 
pElementData = (void*)(SendDlgItemMessage(hDlg, iDialogItem, CB_GETITEMDATA, iElement, 0)); 
if(pElementData != (void*)(CB_ERR)) TB_SAFE_MEMFREE(pElementData); 
} 
// Liste leeren 
SendDlgItemMessage(hDlg, iDialogItem, CB_RESETCONTENT, 0, 0); 
return TB_OK; 
}

Ist es nötig den Inhalt jedes einzelnen Elements, welches meiner Meinung nach nur ein String ist, seperat zu löschen?

SkryptForFun

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

12.12.2010, 16:36

Wenn die Elemente nicht alle schön im Speicher hintereinander aligned sind, dann ja ;)

Aber schöner Code ist das imho nicht, void* wird nicht gerne gesehen.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

12.12.2010, 16:41

Das würde ich nicht so sagen. void* hat auch seine daseinsberechtigung. manchmal muss man halt nicht wissen, was übergeben wird und castet es entsprechend. das wäre wie wenn man object in c# nicht benutzen sollte: manchmal ist es ganz nützlich. schundluder kann man mit treiben na und dafür ist es schliesslich c++ ;)

SkryptForFun

Frischling

  • »SkryptForFun« ist der Autor dieses Themas

Beiträge: 27

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

4

12.12.2010, 16:56

Dann würde das in Speicherlecks enden wenn man das nicht so löscht?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

5

12.12.2010, 17:10

Ja würde es, weil den einzelnen Elementen in der Liste Daten "angeheftet" sind, die beim Löschen der Elemente nicht mitgelöscht werden. Jedes Element beinhaltet nur einen void*-Zeiger auf die angehefteten Daten.

Werbeanzeige