Problem bei Zeiger Arithmetik

23/10/2008 - 21:27 von Karl Heinz | Report spam
Hallo NG,

ich versuche gerade eine variable Größe von Struct Arrays
anzusprechen:

############## beispiel code ###########################
struct test{
int a;
int b;
}

struct test *ArrayTest;

int iSizeOfArray = sizeof(struct test) * varAnzahlStructs;

ArrayTest = (struct test *) malloc(iSizeOfArray);
######################################################

Wie kann ich jetzt sinnvoller weise auf die einzelnen Strukturen
zugreifen? Bisher habe ich das ganze wie folgt gelöst:

################# beispiel code #############################
struct test *tmpArrayTest;
tmpArrayTest=ArrayTest;

for(i=1;1<=NrStrukutr;i++)
{
tmpArray++;
}
##########################################################

Nach dem Durchlauf der Schleife steht der Zeiger dann auf dem Element
welches ich benötige. Folgende Funktion ergibt bei mir immer ein
Sementation Fault:

tmpArrayTest=ArrayTest+sizeof(struct test) * NrStruktur;

theoretisch müßte ich mit dieser Funktion doch auch den Zeiger auf
mein gewünschtes Element setzen oder nicht? Oder wie macht es
grundsàtzlich richtig ?

Besten Dank für eure Antworten

Gruß

Karl-Heinz
 

Lesen sie die antworten

#1 Thomas Koller
23/10/2008 - 21:45 | Warnen spam
Karl Heinz wrote:
ich versuche gerade eine variable Größe von Struct Arrays
anzusprechen:

############## beispiel code ###########################
struct test{
int a;
int b;
}

struct test *ArrayTest;

int iSizeOfArray = sizeof(struct test) * varAnzahlStructs;

ArrayTest = (struct test *) malloc(iSizeOfArray);
######################################################

Wie kann ich jetzt sinnvoller weise auf die einzelnen Strukturen
zugreifen? Bisher habe ich das ganze wie folgt gelöst:

################# beispiel code #############################
struct test *tmpArrayTest;
tmpArrayTest=ArrayTest;

for(i=1;1<=NrStrukutr;i++)
{
tmpArray++;
}
##########################################################

Nach dem Durchlauf der Schleife steht der Zeiger dann auf dem Element
welches ich benötige. Folgende Funktion ergibt bei mir immer ein
Sementation Fault:

tmpArrayTest=ArrayTest+sizeof(struct test) * NrStruktur;

theoretisch müßte ich mit dieser Funktion doch auch den Zeiger auf
mein gewünschtes Element setzen oder nicht?



oder nicht.

Du zàhlst hier quasi doppelt um sizeof(struct test) weiter.
Zeigerarithmek berücksichtigt ja bereits die Grösse des Typen, da darfst
du es nicht nochmal selbst machen.

Oder wie macht es grundsàtzlich richtig ?



tmpArrayTest = ArrayTest + NrStruktur;

oder auch einfach ArrayTest[NrStruktur]

Aber nicht vergessen, in C zàhlt man von 0 weg nicht von 1.
Das erste Element ist also ArrayTest[0] und das letzte
ArrayTest[varAnzahlStructs-1]

Tom

Ähnliche fragen