#include #include #include struct Memory{ int *data; long size; }; void init(struct Memory* mem, long s){ mem->data = (int*) calloc(s,sizeof(int)); mem->size = s; } void resize(struct Memory* mem, long s){ // Speicher reservieren int* new_mem = (int*) calloc(s,sizeof(int)); if (new_mem == NULL){ printf("Fehler: Speicher konnte nicht reserviert werden.\n"); assert(true); } // kopiere alte Daten for (int i=0; isize; i++){ new_mem[i] = mem->data[i]; } // gebe alten Speicher frei free(mem->data); // setze den Pointer auf neues Memory mem->data = new_mem; // lege die Größe size auf die neue Größe s fest mem->size = s; } int read(struct Memory* mem, long index){ if (index<0){ printf("Fehler: Index negativ!\n"); return 0; } if (index>=mem->size){ return 0; } return mem->data[index]; } void write(struct Memory* mem, long index, int value){ if (index<0){ printf("Fehler: Index negativ!\n"); return; } if (index>=mem->size){ resize(mem, index+1000); } mem->data[index] = value; } int main(){ struct Memory m; init(&m, 100); write(&m, 1550000000, 123); printf("m[155]=%d\n",read(&m,155)); printf("m[156]=%d\n",read(&m,156)); free(m.data); // Speicher wieder freigeben /* // --- c ------------------------------ int n = 100; int *ptr = (int*)malloc(n*sizeof(int)); ptr[10] = 123; printf("ptr[10] = %d\n",ptr[10]); free(ptr); // --- c++ ---------------------------- ptr = new int[n]; ptr[10] = 321; printf("ptr[10] = %d\n",ptr[10]); delete[] ptr; */ }