Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C: Einfache Zeigeroperation, Programmabsturz (wieso?) (https://www.delphipraxis.net/22752-c-einfache-zeigeroperation-programmabsturz-wieso.html)

Tubos 22. Mai 2004 21:15


C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Hallo;

wieso stürzt mein Programm bei folgender einfacher Zeigeroperation ab?

Es geht darum, ein int-array durchzumischen.
Dazu habe ich die Funktion Swap geschrieben, die ist aber hier nicht wichtig weil das Prog schon vorher abstürzt:
Code:
void GenerateRandomArray(int *array[],int laenge)
// array = zeiger auf ein array
// laenge = wie viele zeichen des arrays zufällig vertauscht werden sollen
{
   int i;
   srand(GetTickCount());
   // Zuerst alle Zahlen der Reihe nach reinspeichern:
   for (i=0; i<laenge; i++)
*array[i]=i; // Bei diesem Befehl stürzt das Prog ab
   // und jetzt zufällig vertauschen:
   for (i=0; i<laenge; i++) Swap(&array[i],&array[rand()%laenge]);
}
und testweise rufe ich diese Funktion auf:
Code:
   int ar[]={1,2,3,4};
GenerateRandomArray(ar,4);
doch das hat nicht funktioniert.
Ich habe es auch so probiert:
Code:
GenerateRandomArray(&ar,4);
was natürlich falsch ist, und so:
Code:
GenerateRandomArray(&ar[0],4);
aber keine Variante funktioniert.

Wo ist der Fehler?

Chewie 22. Mai 2004 22:08

Re: C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Array-Variablen in C sind ohnehin Zeiger. Du kannst dir also sparen, einen Zeiger auf das Array zu übergeben.

Tubos 23. Mai 2004 00:16

Re: C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Also so?
Code:
void GenerateRandomArray(int array[],int laenge)
error C2100: Zeigeroperation ungueltig

rein logisch gesehen müsste es so auch gehen:
Code:
void GenerateRandomArray(int array,int laenge)
error C2109: Index benoetigt ein Feld oder einen Zeigertyp
und dann innerhalb der funktion:
error C2100: Zeigeroperation ungueltig

70UR157 23. Mai 2004 09:03

Re: C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Funktionskopf:
Code:
void GenerateRandomArray(int *array, int laenge)

Aufruf:
Code:
GenerateRandomArray(ar, 4);

In der Funktion:
Code:
array[i] = i;

merke:
aTestArray (ohne [n]) == die Adr. des 1. Elementes.
Pointer können als Array behandelt werden, und werden durch [n] automatisch dereferenziert.

mfg

Tubos 23. Mai 2004 10:47

Re: C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Jetzt gehts!
Danke!

OregonGhost 23. Mai 2004 11:09

Re: C: Einfache Zeigeroperation, Programmabsturz (wieso?)
 
Zitat:

Zitat von 70UR157
Funktionskopf:
Code:
void GenerateRandomArray(int *array, int laenge)

Auch wenn es semantisch exakt dasselbe ist, schreibt man der Klarheit (für den dummen menschlichen Leser (c; ) besser
Code:
void GenerateRandomArray(int array[], int laenge)
um klar zu machen, dass ein Array erwartet wird (auch wenn das über den Parameternamen schon deutlich wird, aber das muss ja nicht immer so sein).


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz