2015-10-01 4 views
0

main.cНе устанавливая число в памяти правильно

List L; 
Initialize(&L); 
printf("%d\n", Size(&L)); 

list.c

void Initialize (List *L) { 
    L = malloc(sizeof(List)); 
    if (L == NULL) { 
     perror("Unable to create memory for list. Exiting."); 
     exit(1); 
    } 
    L->size = 0; 
} 

int Size (List *L) { 
    return L->size; 
} 

То, что я хочу, выводимый бы размер '0', тем не менее, что я получение - это максимальный int sizeof '2673724'. Я немного смущен в этом вопросе, что не так с моим кодом. Глядя с gdb, похоже, что функция Initialize() фактически не изменяет размер List, поскольку она остается прежней до и после ввода функции.

Я сделал что-то не так?

ответ

2

Эта функция Initialize игнорирует аргумент, выделяет буфер, записывает что-то в него, выкидывает его и вызывает утечку памяти.

Попробуйте эту простую функцию, используя тот же способ, как Size:

void Initialize (List *L) { 
    L->size = 0; 
} 
+0

Это работает. Я не работал в C на некоторое время, и последнее, что я сделал, это работать со связанными списками, а не просто списками, поэтому я запутываюсь между ними. Так что мне по существу не нужно было выделять память для этого, чтобы заставить его работать так, как он есть в стеке вместо кучи? – ComputerLocus

+0

В этом случае вам не нужно было выделять память в 'Initialize', потому что она уже была выделена в стеке. – MikeCAT

+0

Ладно, спасибо, я понимаю свою глупую ошибку. Я сбился с толку, когда смотрел мой старый код на реализацию ** связанного ** списка, а не только на список. – ComputerLocus

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