【快来看!】有意思的TC和VC有关问题
发布时间:2011-06-28 21:46:14 文章来源:www.iduyao.cn 采编人员:星星草
【快来看!】有意思的TC和VC问题!
学习C/C++ 也有一段时间了,一直在同时使用TC与VC两款编译器,发现在使用指针的时候有一个挺有意思的现象:
1.指针在赋值的时候:
#include "iostream.h "
void main()
{
int *p,x;
cin> > x;
*p=x; //这一行在VC中可正常编译,但在运行时会出错,退出程序。必须改成 p=&x; 但TC则没有问题。
cout < <endl < <p < <endl < <endl < <*p < <endl;
}
该代码用TC和VC都可以编译通过,但是用VC编译的程序在运行过程中会出现程序错误,程序会被中止,必须将 *p=x; 改成 p=&x;才能正常运行,可是在TC中 *p=x; 和 p=&x 这两行无论那一行都可以正常运行。
2.在结构体中:
这个就更奇怪了
#include "iostream.h "
typedef struct studend
{
int num;
char name[8];
}stud;
void main()
{
stud *k;
k=new stud; //这一行加与不加在TC中都可以正常编译并正常运行,但在VC中如果不加的话只能正常编译,运行时却会出错退出程序。
cout < < "输入编号: ";
cin> > k-> num;
cout < < "输入姓名: ";
cin> > k-> name;
}
想请问一下,上面这些代码出错到底是因为TC与VC中的那些不同造成的啊?
TC编译器和VC编译器到还有那些区别啊?
请大家帮帮忙啊?
我说的TC是指支持C++的Turbo C++
------解决方案--------------------
1,当然会当拉 你的p都没初始化啊
改这样就不会有问题了
int main()
{
int *p,x;
p = new int;
cin> > x;
*p=x;
cout < <endl < <p < <endl < <endl < <*p < <endl;
delete p;
return 0;
}
------解决方案--------------------
使用野指针,得到一个不确定的结果
------解决方案--------------------
TC啊,17年以前的编译器了,那时候的操作系统还是dos,内存分段模式,空指针访问也不会崩溃的。
扔了吧,TC。
------解决方案--------------------
野指针,也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。例:
char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是p所指的地址仍然不变
if(p != NULL) // 没有起到防错作用
strcpy(p, “world”); // 出错
另外一个要注意的问题:不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
身为程序员一定要学C吗?还是直接学其他语言就可以了?
本来有javascript基础.
但想学c++或者c#.不知道从何开始.
有一次在某网站看...
-
有用双屏幕开发的吗?
RT,本人新手,昨天公司发了个大屏幕的显示器,本来是笔记本,结果我双屏幕切换时把两个显卡驱动都禁用了,两个显示器...
-
急!Microsoft Visual Studio 2010图标显示问题!
一开始我是把VS的那个无穷大似的图标锁定在任务栏里的,后来解锁了,然后桌面上、开始...
-
AIX下如何得知一个文件是否被进程打开?
问题可以参考
http://topic.csdn.net/u/20110809/23/d4d8db23-07eb-4ac3-b212-c5a010820c...
-
推荐一款2000左右的智能机
RT~
------解决方案--------------------
merry christmas
------解决方案--------------------
小...
-
关于 % 的小问题,求解
有这样一句提示信息:
printf("n请输入一个型如2+3*(4+5)-3^2%4*6/2的表达式n");
但在运行后输出是:
请输入...
-
新手求助
大家好,鄙人刚来,菜鸟一个,想知道如何下载别人上传的资源,为什么没有下载链接,是需要一定的分数才能下载还是怎么回事?希望好...
-
CSDN有搜索自己发言或者某人发言的功能吗
请指教
------解决方案--------------------
没有。。。
------解决方案------------...
-
订到2张回成都的车票, 不容易啊, 散分
12点左右就每5分钟刷一次, 从13号到16号就一直只有无坐...
13:55 刷出3张硬卧, 大喜, 结...
-
计算机专业大四应该学点什么东西呢?
我现在的情况是已经保研,计算机专业专业硕士。现在大四上半学期快结束了,寒假和下学期除了毕业...