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]);
}
4

2 回答 2

3

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

可能您没有为s3.

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

你能告诉我我应该改变什么来消除错误吗?

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

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

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

stack_ptr->s3[top++] = element;
于 2013-07-22T04:20:17.293 回答
0

您需要检查两者stack_ptr是否stack_ptr->s3已在您的代码中分配和初始化内存。

于 2013-07-22T04:21:20.817 回答