hi leute,
Meine struct:
Struktur ArrayInt beinhaltet einmal die Größe eines dynamischen Arrays und den Zeiger auf das dynamische Array. Mit den Funktionen soll die Struktur bearbeitet werden.
Mein Problem:
Wenn ich den Speicher mit CreateArray() alloziiere wird die Variable size der Struktur ArrayInt richtig belegt. (Ausgabe: "Größe: 5")
Wenn ich den alloziierten Speicher mit SetValue() belege, wird die Variable size leider überschrieben und enthält dann den Wert des dritten Elements.
Kann sich jemand denken warum:
Mein code:
Alles anzeigen
Es wäre supertoll, wenn mir jemand einen Hinweis geben könnte.
Viele Grüße
Chris
Meine struct:
Struktur ArrayInt beinhaltet einmal die Größe eines dynamischen Arrays und den Zeiger auf das dynamische Array. Mit den Funktionen soll die Struktur bearbeitet werden.
Mein Problem:
Wenn ich den Speicher mit CreateArray() alloziiere wird die Variable size der Struktur ArrayInt richtig belegt. (Ausgabe: "Größe: 5")
Wenn ich den alloziierten Speicher mit SetValue() belege, wird die Variable size leider überschrieben und enthält dann den Wert des dritten Elements.
Kann sich jemand denken warum:
Mein code:
Quellcode
- /* Includefiles */
- #include <stdio.h> /*printf, getchar*/
- #include <stdlib.h> /*malloc, realloc*/
- /* Declarations of Structures */
- struct ArrayInt
- {
- int size;
- int *element;
- };
- /* Declarations of Functions */
- struct ArrayInt *CreateArray(int numberElements);
- void DeleteArray(struct ArrayInt *ptr_Array_Int);
- int GetValue(struct ArrayInt *ptr_Array_Int, int aElement);
- int GetSize(struct ArrayInt *ptr_Array_Int);
- void SetValue(struct ArrayInt *ptr_Array_Int, int aElement, int aValue);
- void errorOutOfMemory();
- void errorWrongNumberOfElements();
- /* Main-Function */
- int main(int argc, char *argv[])
- {
- struct ArrayInt *testArray;
- testArray = CreateArray(5);
- printf("Größe: %d\n", GetSize(testArray));
- SetValue(testArray, 0, 22);
- SetValue(testArray, 1, 33);
- SetValue(testArray, 2, 44);
- SetValue(testArray, 3, 55);
- SetValue(testArray, 4, 66);
- printf("Ausgabe: %d\n", GetValue(testArray, 0));
- printf("Ausgabe: %d\n", GetValue(testArray, 1));
- printf("Ausgabe: %d\n", GetValue(testArray, 2));
- printf("Ausgabe: %d\n", GetValue(testArray, 3));
- printf("Ausgabe: %d\n", GetValue(testArray, 4));
- printf("Größe: %d\n", GetSize(testArray));
- }
- /********************************************
- CreateArray
- ********************************************/
- struct ArrayInt *CreateArray(int numberElements)
- {
- struct ArrayInt *ptr_Array_Int;
- if(numberElements <= 0) errorWrongNumberOfElements();
- ptr_Array_Int = malloc(sizeof(struct ArrayInt));
- if(!ptr_Array_Int) errorOutOfMemory();
- ptr_Array_Int->element = malloc(numberElements * sizeof(int));
- ptr_Array_Int->size = numberElements;
- return(ptr_Array_Int);
- }
- /********************************************
- GetSize
- ********************************************/
- int GetSize(struct ArrayInt *ptr_Array_Int)
- {
- return( ptr_Array_Int->size );
- }
- /********************************************
- SetValue
- ********************************************/
- void SetValue(struct ArrayInt *ptr_Array_Int, int aElement, int aValue)
- {
- int *ptrTMP;
- if(aElement >= ptr_Array_Int->size) return;
- //ptrTMP = ptr_Array_Int->element + (aElement * sizeof(int));
- //+*ptrTMP = aValue;
- *(ptr_Array_Int->element + (aElement * sizeof(int))) = aValue;
- //+*ptr_Array_Int->element = aValue;
- }
- /********************************************
- GetValue
- ********************************************/
- int GetValue(struct ArrayInt *ptr_Array_Int, int aElement)
- {
- return( *(ptr_Array_Int->element + (aElement * sizeof(int))) );
- }
- /********************************************
- DeleteArray
- ********************************************/
- void DeleteArray(struct ArrayInt *ptr_Array_Int)
- {
- if(!ptr_Array_Int) return;
- if(ptr_Array_Int->element) free(ptr_Array_Int->element);
- }
- void errorOutOfMemory()
- {
- printf("Fatal Error! Out Of Memory.\n");
- exit(-1);
- }
- void errorWrongNumberOfElements()
- {
- printf("Error! Wrong Parameter: Number Of Elements.\n");
- exit(-1);
- }
Es wäre supertoll, wenn mir jemand einen Hinweis geben könnte.
Viele Grüße
Chris