Я пытаюсь получить зависание c, и я не могу понять, почему этот код создает segfault.Почему передача структуры таким образом создает segfault?
// In src/test.c
#include <stdio.h>
typedef struct {
int length;
int *arr[1000];
} Stack;
void push(Stack *stack, int el) {
(*stack->arr)[stack->length++] = el;
}
int pop(Stack *stack) {
return (*stack->arr)[--stack->length];
}
int main(int argc, char* argv[]) {
Stack stack;
push(&stack, 5);
printf("%d\n", pop(&stack));
return 0;
}
Тогда я скомпилировать и запустить:
$ gcc src/test.c -o test && ./test
[1] 79484 segmentation fault ./test
Ну, какая строка вызывает ошибку ??? – OldProgrammer
Я даже не знаю, как это узнать, но, судя по коду, я уверен, что это функция 'push' или' pop'. Все еще * очень * новичок в c. – benekastah
Вы не инициализируете 'stack.length'. (И скомпилировать с '-g' и использовать' gdb' для отладки.) – Mat