Seite 1 von 1

Feld beschreiben über Zeiger auf Zeiger

Verfasst: Mo Mai 06, 2013 7:16 pm
von The92
Guten Abend!

Ich hab ein Problem mit meinem C-Programm..
Und zwar rufe ich im main die Funktion generieren auf, und übergebe die Adresse eines Zeigers und einer normalen Variablen. Empfangen wird das ganze mit einem Zeiger und einem Zeiger auf Zeiger. Das Datenfeld wird dann über die Funktion malloc erzeugt. Mit dem schrittweisen debuggen funktioniert das sogar meines Wissens nach. Aber beim Wertezuweisen mit der Funktion rand() tritt beim zweiten Durchlauf der for-Schleife ein Fehler auf..

Kann mir jemand sagen warum und was ich ändern sollte damit es funktioniert?

Code: Alles auswählen

...
int anzahl;
float *z;
generieren(&anzahl,&z);
...

Code: Alles auswählen

void generieren(int *n, float **z)
{
	printf("Wie viele Zufallszahlen sollen erzeugt werden?");
	scanf("%i",n);
	*z=(float *) malloc (sizeof(float)*(*n));
	if (*z)
		for (int i=0; i<(*n); i++)
		{
			**(z+i)=rand();
		}
	else
		printf("Der Speicherbereich war nicht verfügbar!");
}

Re: Feld beschreiben über Zeiger auf Zeiger

Verfasst: Mo Mai 06, 2013 7:23 pm
von cloidnerux

Code: Alles auswählen

  **(z+i)=rand();
Du inkrementierst einen Zeiger auf einen Zeiger auf float um eins.
Was du suchst ist:

Code: Alles auswählen

(*z)[i] = rand();
Was gleichbedeutend mit

Code: Alles auswählen

*((*z)+i) = rand();
ist.

Du inkrementierst einfach nur den falschen Pointer ;)

MfG cloidnerux

Re: Feld beschreiben über Zeiger auf Zeiger

Verfasst: Mo Mai 06, 2013 7:28 pm
von The92
Genial :D Danke!!

Mit den Zeigern vertu ich mich fast immer..

Re: Feld beschreiben über Zeiger auf Zeiger

Verfasst: Mo Mai 06, 2013 7:29 pm
von cloidnerux
Mit den Zeigern vertu ich mich fast immer..
Ist halt eine Lern- und Erfahrungssache. Nachdem man alle typischen Fehler gemacht hat, weiß man wie es richtig geht^^