C 语言指针的问题

结构体的指针运算,编译可以通过,但是运行时出现错误,不知道为什么,求详解!

#include<stdio.h>
#include<stdlib.h>

typedef struct Stack{
  int * List;
  int curNumber;
}Stack, *link;

int main(){
  void initst(link *A);
  void pus(link *A,int k);
  
  link *A;
  int k = 8;
  initst(A);
  pus(A, k);
  return 0;
}

void initst(link *A){
  *A = (link#)malloc(sizeof(Stack));
  (*A) -> List = (int *)malloc(4 * sizeof(int));
}
void pus(link *A,int k){
  *((*A)-> List) = k;
  printf("%d \n",*((*A) -> List));  
}
阅读 2.4k
3 个回答

看不懂你的push想干嘛。

你的A是个二级指针吧。其实是Stack **A对吧。
你在initst对*A进行修改,可是你没有初始化A啊,A指向的是随机地址。
类型这么定义比较好
…… }Stack, *PStack;
……
PStack pA; // 注意 pA 也是一个指针啊!
PStack *ppA = &pA;
initst(ppA);
你这个逻辑调用initst后会修改pA存储的地址啊。

新手上路,请多包涵
#include<stdio.h>
#include<stdlib.h>

typedef struct Stack{
    int * List;
    int curNumber;
}Stack, *link;


void initst(link *A){
    *A = (link)malloc(sizeof(Stack)); // 分配内存后不需要再取地址
    (*A)->List = (int *)malloc(4 * sizeof(int));
}

void pus(link A,int k){// 修改参数为 link 类型而不是指向指针的指针
    A->List[0] = k; // 将 k 存入 List 中
    printf("%d \n",A->List[0]);
}

int main(){

    link A; // 不再需要使用指向指针的指针
    int k = 8;
    initst(&A); // 传入指针的地址
    pus(A, k); // 直接传入指针
    return 0;
}

我修正了函数声明和参数传递,并对初始化和压栈函数进行了更正。希期现在这份代码可以按照你的期望运行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题