传递整数数组时的分段错误

时间:2013-07-22 04:16:53

标签: c linux pointers

我已在此处粘贴代码*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]);
}

2 个答案:

答案 0 :(得分:3)

  

语句(*stack_ptr->s3++ = element;)发生了细分错误,

可能你没有为s3分配内存。

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

请您告诉我应该更改哪些消除错误?

在声明stack_1s3分配内存之后的main()函数中(你也应该为s1分配内存),请执行以下操作:

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

此外,您不应该增加s3指针。 (你将失去起始地址)喜欢:

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

答案 1 :(得分:0)

您需要检查stack_ptrstack_ptr->s3是否已分配内存并已在代码中初始化。