2013-07-22 4 views
0

여기 코드를 붙여 넣습니다. *stack_ptr->s3++ = element; 세그먼트 화 오류가 발생했습니다. 오류를 제거하기 위해 무엇을 바꾸어야하는지 알려주세요.정수 배열을 함수로 전달할 때 세그먼트 오류가 발생했습니다.

typedef int stack_elmnt_int; 
typedef struct { 
    stack_elmnt *s1; 
    stack_elmnt_int *s3; 
    int length; 
    int top; 
} stack; 


int push_stack_int(stack *stack_ptr, stack_elmnt_int element) 
{ 
    int i=0; 

    if (stack_full(stack_ptr)) 
     printf("\nStack is full."); 
    else{ 
     *stack_ptr->s3++ = element; 
    } 
} 
void main() 
{ 
    int arr[128], arr_num = sizeof(arr)/sizeof(int); 
    //after input from user to arr 
    //partial code pasted here 

    for(i=0;i<arr_num ;i++) 
     push_stack_int(&stack_1,arr[i]); 
} 
+1

's3'을 초기화 했습니까? – Yang

+2

전체 코드, 특히 stack_1 선언이 제대로 초기화되지 않았으므로이를 확인할 필요가 있습니다. – samoz

+1

segfault는's3'에 메모리를 할당하지 않았기 때문에'* stack_ptr-> s3 ++ = element;'에 있습니다. –

답변

3

(*stack_ptr->s3++ = element;) 세그먼트 오류는 아마 당신이 s3 메모리를 할당하지 않는,

을 발생하는됩니다.

*stack_ptr->s3++ = element; 
      ^
       | assigning to garbage location 

당신은 제가 오류를 제거하기 위해 변경해야하는지 알려 주시기 바랍니다 수 있습니까?

stack_1.s3 = calloc(MAX_NUMBER_OF_ELEMENT, sizeof(stack_elmnt_int)); 

는 또한 당신이 s3 포인터를 증가하지 않아야처럼 stack_1의 선언 후 main() 함수에서

s3 메모리 (당신은 또한 s1에 대한 메모리를 할당한다)을 할당 할. 좋아합니까 (당신은 손실 주소 시작됩니다) :

stack_ptr->s3[top++] = element; 
+0

고마워, 질문을 던진 후에 나는 이것을 시험해 보았다. stack_ptr-> s3 [top ++] = element; 그리고 효과가있었습니다. 덕분에 – Madara

+0

@ Mike your welcom Mike!,'++'는 후위이므로 '++'가 수행 된 후 'top'의 현재 값으로 색인에 지정된 첫 번째 'element'. –

0

당신은 stack_ptrstack_ptr->s3 모두 메모리를 가지고 할당 코드에서 이전에 초기화되어 있는지 확인해야합니다.

관련 문제