关于gcc和vs的一点小看法和疑问
时间:2010-08-18
来源:互联网
- #include <stdlib.h>
- #include <stdio.h>
-
- #define INIT_SIZE 4
-
- typedef struct stufile
- {
- .......
-
- }record;
- record * Init_List()
- {
- int i;
- record *L, *Ltemp;
- L = (record *)malloc(sizeof(record));
- L->next = NULL;
-
- record *Lsec = L;
-
-
- for( i = 0; i < INIT_SIZE; i++)
- {
- Ltemp = (record *)malloc(sizeof(record));
- Ltemp->numb = i;
- Ltemp->score = (float)(90 - i);
- // Ltemp->next = NULL; //问题原因
- Lsec->next = Ltemp;
- Lsec = Ltemp;
- }
-
- return L;
- }
-
- int List_Length(record *L)
- {
- int total_len = 0;
- record * temp = L;
-
- while(temp->next != NULL) //vs下这里出错,
- {
- ++total_len;
- temp = temp->next;
- }
-
- return total_len;
- }
-
- int main()
- {
- int i = 0;
-
- record *L1 = NULL;
- L1 = Init_List();
-
- i = List_Length(L1);
- printf("create list length is:%d\n", i);
-
- }
出问题的地方在Init_List函数里面,没有设置NULL空指针,
因此,List_Length函数的List_Length会出现访问冲突(访存不合法),
但是在gcc里面这个没问题,按理说有些不严谨
但是想想看:
gcc处理时,就把NULL赋值给temp->next了,所以程序可以完好的结束。
vs中处理的是把temp->next弄成某个地址(随便的吧),不是NULL,所以
会出问题。
当然程序员自身要更谨慎(都是自己的错,呵呵),这里只是说一下调试碰到的问题。
ps: 调试环境 gcc:4.4.3 gdb:7.1-ubuntu
vs:2005
作者: wkq5325 发布时间: 2010-08-18
作者: EricFisher 发布时间: 2010-08-18
作者: hellioncu 发布时间: 2010-08-18
gcc执行成功
vs执行不成功
作者: wkq5325 发布时间: 2010-08-18
两个标准有很多的不一样的地方,当然,始终按照c90的标准来编写程序总是没错的,
不过按照c99来编写程序有时会很省事情,也不错哦
你的这个应该是标准不一致造成的
作者: roolcz 发布时间: 2010-08-18
你说的不对吧,我是调试时,看到的,NULL赋值给。但vs并没有这么做
程序运行是没问题的,那你的意思是,我再用gcc编译一遍再运行就可能有问题了,
那我运气也太好了吧,每次都成功。
作者: wkq5325 发布时间: 2010-08-18
也许吧,我只是当时感到很奇怪,竟然默认NULL结束了
作者: wkq5325 发布时间: 2010-08-18
作者: tianxiaogang12 发布时间: 2010-08-18
你说的不对吧,我是调试时,看到的,NULL赋值给。但vs并没有这么做
程序运行 ...
wkq5325 发表于 2010-08-18 11:56
malloc申请到的内存是没有保证被初始化为0的,当然也有一定机会是0.
你每次都可以,很大程度是因为你机器的环境没有改变,试试运行前运行一些其他的程序,重启机器等
作者: hellioncu 发布时间: 2010-08-18
重启后,之前运行其他程序都可以成功运行(我也试着拷贝到另外一台服务器上,也行),应该和你说的不是一回事,
前面的一位说的给编译器有关,我觉得还差不多
作者: wkq5325 发布时间: 2010-08-18
作者: zhaohongjian000 发布时间: 2010-08-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28