2015-03-11 2 views
0

В качестве обзора я пытаюсь создать игру, похожую на броненосец, на C, где корабли помещаются в поле.Valgrind Ошибка при создании массива связанных списков (для цепочки цепочек хэшей)

Здесь ошибка я получаю:

==11147== Invalid write of size 8 
==11147== at 0x400786: MakeField (battleship.c:34) 
==11147== Address 0x8 is not stack'd, malloc'd or (recently) free'd 

Вот соответствующий код:

struct piece{ 
    int x; 
    int y; 
    int direction; 
    int length; 
    char name; 

}; 

struct node{ 
    struct piece boat; 
    struct node *next; 

}; 


struct field{ 
    int numBoats; 
    struct node *array[numRows]; 
}; 

struct field *MakeField(void){ 
    struct field *f = NULL; 
    struct node *temp = NULL; 

    for(int i = 0; i < numRows; i++){ 
     f->array[i] = temp; <--- VALGRIND ERROR HERE 
    } 

    f->count = 0; 
    return f; 
} 

Может кто-нибудь помочь с этим вопросом?

ответ

1

Вы разыменования NULL poitner, вы должны сделать свой пункт указатель где-то и где-то действительное, как этот

struct field *f = malloc(sizeof(struct field)); 
if (f == NULL) 
    return NULL; 
/* ... continue your MakeField() function as it is */ 

не забудьте free(f) в функции вызывающего абонента.

Кстати, valgrind говорит вам, что

Address 0x8 is not stack'd, malloc'd or (recently) free'd 
          ~~~^~~~ 
Смежные вопросы