2015-03-23 2 views
1
struct DynamicArray { 
     int allocated; 
     int used; 
     int *array; 
}; typedef struct DynamicArray DynamicArray; 

DynamicArray * ArrayCreate(int initialSize) { 
     DynamicArray *array; 
     (*array).array = (int*)malloc(initialSize*sizeof(int)); //Debugger points this line. 
     if((*array).array == NULL) { 
      return NULL;  
     } 
     (*array).allocated = initialSize; 
     (*array).used=0; 
     return array; 
} 

Я пытаюсь создать свою собственную библиотеку для динамических массивов. Просто учиться и совершенствоваться. Просмотрите мой код. Что я делаю не так?Ошибка при доступе при попытке сделать выделение памяти

ответ

3

Вы де ссылки неинициализированного указателя здесь:

DynamicArray *array; // uninitialized 
(*array).array = .... // ooops 

Вам нужно сделать array точку в некоторую память можно записать в. Например

DynamicArray *array = malloc(sizeof(DynamicArray)); 
+0

oh, что имеет смысл. Благодарю. – Nemesis

0

Первое использование этого:

DynamicArray *array; 
array = (DynamicArray *)malloc(sizeof(struct DynamicArray)); 
array->array = ... 

Если вы не инициализировать точку вы не можете разыменования, потому что его точка NULL.

Смежные вопросы