C에서 연결된 목록을 사용하여 스택을 구현하려고하지만 새 값을 입력 한 후에 값을 호출하려고 할 때마다 segfaults가 발생합니다. 스택에. 나는 프로그램이 여전히 스택이 null이라고 덧붙여서 이것이 일어나고 있음을 알고있다. 어떤 이유에서 나는 푸시에서 변경 한 사항이 함수가 종료 될 때 머물러 있지 않고 이유를 파악할 수 없습니다. 그것의 일부, 도움을 주셔서 감사합니다하지만 난 푸시 정확히 이러한 매개 변수와 함께 수행되어야한다는 얘기를 깜빡 했네요 :초기화 된 스택에 데이터를 푸시 할 때 C 연결 목록이 변경되지 않음
typedef struct stack
{
int value;
struct stack * next;
} * stack_T;
stack_T
new_stack()
{
return NULL;
}
int
push_stack(stack_T s, int data)
{
stack_T new = malloc(sizeof(stack_T));
new = s;
if (s == NULL)
{
s = malloc(sizeof(stack_T));
if (s == NULL)
return 1;
}
s->value = data;
s->next = new;
return 0;
}
편집 :
여기 내 스택 구조체 초기화 코드 및 푸시입니다 과제. 나는 그것을하는 방법을 찾고있는 것이 아니라 내가 잘못하고있는 것을 찾고 있습니다. 내가 참조로 패스를 에뮬레이션 할 수 있다는 것을 알고 있지만, 내가 말했듯이 있어야한다 :이 스타일 이전
int push_stack(stack_T s, int data)
내가 만든 한 구조체 단지 매개 변수로 데리고 기능을 가지고 및 변경은 유지하지만 원 이 경우에 나는 왜 그런지 전혀 모른다.
을 발생하는되는 행을 결정하기 위해
valgrind
를 사용할 수 있다는 것입니다. 왜냐하면'malloc (sizeof (stack_T))'는 구조체가 아닌 포인터 ***에 충분한 공간을 할당하기 때문입니다. –c *에서 참조로 에뮬레이션 호출을 검색하고 읽으려면 시간이 좀 걸릴 것입니다. –
또한 스택을 malloc했지만 다음 라인의 유일한 참조를 덮어 씁니다 .... 무엇을 가리키는 지 그림을 그려야하고 코드를 따라 가야합니다. 많은 실수가 있습니다 ... – blackghost