大佬们,为啥会出现3221225477错误

weixin_40799464 2019-07-11 12:16:05
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

typedef struct node
{
int *base;
int *top;
}theStack;

int main()
{
theStack *S;
S->base =(int *)malloc(sizeof(int)*10);
return 0;
}

其中,如果主函数中改为 theStack S; S.base =(int *)malloc(sizeof(int)*10);就不会出错,这是为啥???
...全文
5707 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MATT1130 2021-10-14
  • 打赏
  • 举报
回复

因为原来的代码中S是一个指针,指针他默认指向的空间是随机的,你还没有给它指向一个变量,访问时当然会越界(据我所知,3221225477是指std::out_of_range)

weixin_40799464 2019-07-15
  • 打赏
  • 举报
回复
谢谢大佬们,了解了
自信男孩 2019-07-11
  • 打赏
  • 举报
回复
因为定义成指针,那么S是一个野指针,所以S->base就可能会导致段错误,
因为S指向的区域可能是不可写的,那么S->base = xxx;其实就是对其写的操作。
weixin_40290083 2019-07-11
  • 打赏
  • 举报
回复
theStack *S;表示你声明了一个指向theStack的指针变量,程序运行时它全指针变量分配了内存空间,但是指针的值是无效的。即它没有指向任何的变量,也就是对于这个指针没以有赋值。 theStack S;表示声明了一个theStack的变量,
636f6c696e 2019-07-11
  • 打赏
  • 举报
回复
theStack *S是一个空指针,当然会报错 你要么搞成栈内存:theStack S; 要么动态申请:theStack *S =(theStack *) malloc(sizeof(theStack));

70,007

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧