结构体指针声明以后没有进行初始化为什么也可以正常运行

zjtzlqr 2013-02-22 07:22:39
#include "stdio.h"
int main(void)
{
typedef struct
{
char doti,i,oper,dotflag,esflag;
char number[8];
char dotnumber[8];
char num;
}Cal_Struct ;
Cal_Struct * Cal;
Cal->doti=0;
Cal->i=0;
Cal->oper=0;
Cal->dotflag=1;
Cal->esflag=0;
printf("%d",Cal->i);

}
...全文
870 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aixiaochongchong 2013-03-20
  • 打赏
  • 举报
回复
用WinHex
zjtzlqr 2013-03-20
  • 打赏
  • 举报
回复
使用vc6以后报错了
xiaobao929 2013-02-25
  • 打赏
  • 举报
回复
踩内存并不一定会出错,这也是为什么有的内存问题会很久才暴露出来....
赵4老师 2013-02-23
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
赵4老师 2013-02-23
  • 打赏
  • 举报
回复 1
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。
自信男孩 2013-02-22
  • 打赏
  • 举报
回复
Cal_Struct * Cal;楼主这是定义了一个结构体指针,该指针是一个野指针,指向的位置是随机的。所以,有可能是可以正常执行。不过,潜在的危险还是很大的。因此,应该先为该指针申请空间;

Cal_Struct *Cal = (Cal_Struct *)malloc(sizeof(Cal_Struct));
if (NULL == Cal)
{
...
}
...
free(Cal);
ForestDB 2013-02-22
  • 打赏
  • 举报
回复
这么好的运气/人品不是一直都有的。
狐帝 2013-02-22
  • 打赏
  • 举报
回复
你用的编译器或者编译器的选项使得指针变量在编译时未被编译器初始化成NULL,这样你的程序在运行的时候,这个指针变量的值是一个随机的数值,如果指向的地址恰好是一片未被使用的空间,那么你的运气就很好,这个程序就能正常运行。可是你能保证运气永远这么好么?所以,指针在被引用前还是一定要初始化的。
AnYidan 2013-02-22
  • 打赏
  • 举报
回复
什么环境?用vs 看看
derekrose 2013-02-22
  • 打赏
  • 举报
回复
什么编译器。。。
wade_2003 2013-02-22
  • 打赏
  • 举报
回复
我觉得这种赋值方式是不是会分配内存?
stjay 2013-02-22
  • 打赏
  • 举报
回复
看看反汇编,是不是被优化掉了?

69,371

社区成员

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

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