shutdown
20-09-2009, 22:56
Hallo,
ich habe das Problem, dass ich wahrscheinlich Irgendetwas wichtiges bei der Verwendung von malloc vergesse oder nicht berücksichtige und komme einfach nicht drauf, warum folgendes funktioniert
#include <stdio.h>
#include <stdlib.h>
int *arr;
void allocate_memory(int arraysize) {
int i;
arr = (int *) malloc(sizeof(int)*arraysize);
arr[0]=arraysize;
for (i=1; i<arraysize; i++) arr[i]=i;
}
void read_memory() {
int i;
for (i=0; i<arr[0]; i++) printf("arr[%i]=%i\n",i,arr[i]);
}
int main()
{
allocate_memory(4);
read_memory();
return 0;
}
und folgendes NICHT funktioniert (führt zu Segfault)
#include <stdio.h>
#include <stdlib.h>
void allocate_memory(int *arr, int arraysize) {
int i;
arr = (int *) malloc(sizeof(int)*arraysize);
arr[0]=arraysize;
for (i=1; i<arraysize; i++) arr[i]=i;
}
void read_memory(int *arr) {
int i;
for (i=0; i<arr[0]; i++) printf("arr[%i]=%i\n",i,arr[i]);
}
int main()
{
int *arr;
allocate_memory(arr,4);
read_memory(arr);
return 0;
}
Der einzige Unterschied ist, dass der Pointer arr einmal global und einmal lokal definiert ist - da er aber lokal in main() definiert ist, sollte ich doch keine Probleme haben, da die lokalen Variablen in main() solange gültig sind wie das Programm läuft.
Was mache ich da falsch? Ich bräuchte hier mal einen kleinen Denkanstoss oder bin mittlerweile einfach zu vernagelt um es zu sehen... :confused:
Edit: Der Segfault-Fehler tritt übrigens erst in read_memory() auf.
ich habe das Problem, dass ich wahrscheinlich Irgendetwas wichtiges bei der Verwendung von malloc vergesse oder nicht berücksichtige und komme einfach nicht drauf, warum folgendes funktioniert
#include <stdio.h>
#include <stdlib.h>
int *arr;
void allocate_memory(int arraysize) {
int i;
arr = (int *) malloc(sizeof(int)*arraysize);
arr[0]=arraysize;
for (i=1; i<arraysize; i++) arr[i]=i;
}
void read_memory() {
int i;
for (i=0; i<arr[0]; i++) printf("arr[%i]=%i\n",i,arr[i]);
}
int main()
{
allocate_memory(4);
read_memory();
return 0;
}
und folgendes NICHT funktioniert (führt zu Segfault)
#include <stdio.h>
#include <stdlib.h>
void allocate_memory(int *arr, int arraysize) {
int i;
arr = (int *) malloc(sizeof(int)*arraysize);
arr[0]=arraysize;
for (i=1; i<arraysize; i++) arr[i]=i;
}
void read_memory(int *arr) {
int i;
for (i=0; i<arr[0]; i++) printf("arr[%i]=%i\n",i,arr[i]);
}
int main()
{
int *arr;
allocate_memory(arr,4);
read_memory(arr);
return 0;
}
Der einzige Unterschied ist, dass der Pointer arr einmal global und einmal lokal definiert ist - da er aber lokal in main() definiert ist, sollte ich doch keine Probleme haben, da die lokalen Variablen in main() solange gültig sind wie das Programm läuft.
Was mache ich da falsch? Ich bräuchte hier mal einen kleinen Denkanstoss oder bin mittlerweile einfach zu vernagelt um es zu sehen... :confused:
Edit: Der Segfault-Fehler tritt übrigens erst in read_memory() auf.