AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C: Einfache Zeigeroperation, Programmabsturz (wieso?)
Thema durchsuchen
Ansicht
Themen-Optionen

C: Einfache Zeigeroperation, Programmabsturz (wieso?)

Ein Thema von Tubos · begonnen am 22. Mai 2004 · letzter Beitrag vom 23. Mai 2004
Antwort Antwort
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#1

C: Einfache Zeigeroperation, Programmabsturz (wieso?)

  Alt 22. Mai 2004, 22:15
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?
Lukas
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 22. Mai 2004, 23:08
Array-Variablen in C sind ohnehin Zeiger. Du kannst dir also sparen, einen Zeiger auf das Array zu übergeben.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#3

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

  Alt 23. Mai 2004, 01:16
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
Lukas
  Mit Zitat antworten Zitat
70UR157

Registriert seit: 12. Jan 2003
24 Beiträge
 
#4

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

  Alt 23. Mai 2004, 10:03
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
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#5

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

  Alt 23. Mai 2004, 11:47
Jetzt gehts!
Danke!
Lukas
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

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

  Alt 23. Mai 2004, 12:09
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).
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz