wie groß darf eine Array sein?
-
//Hier reserviert du einen speicherblock von 500*500*4 Bytes //dieser beginnt an der stelle der Adresse des Zeigers pStack double *pStack = (double*)malloc[sizeof(double)*500*500];
Den zeiger pStack kannst du nun durch dein programm rumreichen bspw. funktionsparameter übergeben etc.
Dein 2 Dim Array wird sequentiell gespeichertdas heist 4*500 Bytes blöcke liegen 500 mal hintereinder.
// mit diesem aufruf greifst du quasei auf die kodinaten x,y im block zu
int x=??,y=??; pStack[x*500+y]=5;
wenn der speicehr nicht mehr notwendig ist bspw. am ende deines programm löscht du ihn wieder mit
free(pStack);
-
BorisDieKlinge schrieb:
free(pStack);
du castest den rückgabewert von 'malloc', aber das argument von free castest du nicht? na, wie passt das denn zusammen?
-
entschuldigung... muss nebenberi arbeiten.. solche kleinigkeiten überseh ich
-
Da die Dimensionen bereits beim Kompilieren bekannt sein sollen, können wir das Ganze allerdings etwas bequemer handhaben. Nur weil unser Objekt zu groß, heißt das doch nicht, dass die einfache Notation üblicher Array-Indizierung aufgeben werden muss.
double (*pStack)[500] = malloc(500*sizeof *pStack); pStack[x][y]=5; free(pStack);
-
camper schrieb:
[cpp]double (*pStack)[500]
nice
-
fricky schrieb:
camper schrieb:
[cpp]double (*pStack)[500]
nice
womit hast du es compiliert ?
nice, wenn es der compiler frisst.C:\Programme\PellesC\Projects\test\test.c(6): error #2001: Syntax error; found 'double' expecting '{'.
-
Kommando zurück!
Der Fehler war meinerseits und liegt woanders!
-
davon abgesehen:
double *pStack[500]
hier hab ich ein zeiger array, was ist wenn das zeiger array
100000000 groß ist.. dann ist der stack wieder zu voll;)
dann lieber so
double **pDimX= malloc(500*sizeof(*double)); for(int y=0; <500; ++y) pDimX[y]= malloc(500*sizeof(double);
sicher paar synax fehler drin^^
-
Nein, dann lieber die lineare Variante und die Indizierung mit pStack[x*500+y];
Dann sparst du ganz viele Zeiger und RAM
-
wieso? statt 1.000.000 Bytes hast halt 1.002.000 Bytes^^
-
BorisDieKlinge schrieb:
davon abgesehen:
double *pStack[500]
hier hab ich ein zeiger array, was ist wenn das zeiger array
100000000 groß ist.. dann ist der stack wieder zu voll;)deswegen benutzen wird auch nur einen zeiger: *double (pStack)[500];
-
BorisDieKlinge schrieb:
...
hier hab ich ein zeiger array, was ist wenn das zeiger array
100000000 groß ist.. dann ist der stack wieder zu voll;)
dann lieber so ...NÖ, dann hast du 100000000 * sizeof ( double* ) Bytes zuviel.
Macht Summa Summarum 400000000 Bytes. In Worten: vierhundert millionen. Das ist fast ein halbes, verschwendetes Gigabyte.
-
[quote="Der Linearisierer
NÖ, dann hast du 100000000 * sizeof ( double* ) Bytes zuviel.
Macht Summa Summarum 400000000 Bytes. In Worten: vierhundert millionen. Das ist fast ein halbes, verschwendetes Gigabyte.[/quote]Sorry! Ich habe wohl ganz schön Quatsch geschrieben gerade. Da muss ich noch mal überlegen!
Gruß
D.L.
-
Der Linearisierer schrieb:
Sorry! Ich habe wohl ganz schön Quatsch geschrieben gerade. Da muss ich noch mal überlegen!
Gruß
D.L.Nein. Kein Quatsch. So ist das.