c++指针与数组

来源:百度知道 编辑:UC知道 时间:2024/05/29 21:16:35
#include<iostream>
using namespace std;
void main()
{
int t=0;
int *a=&t;

for(int i=0;i<13;i++)
a[i]=i;
for(i=0;i<5;i++)
cout<<a[i]<<endl;
//a=null;
}

这个程序为什么在vc++上可以运行??
是不是指针可以当数组用?
但是为什么最后释放的时候又出现了内存错误?
首先先谢谢前两位的回答!
但是我要问的问题是为什么vc++可以通过这样的程序!
我本身知道如楼下两位所说的那种正确的写法!
我现在所关心的是为什么这种错误编译器会把它当正确的!
还有最后一句a=null我在程序里已经加了//它只是一个注释!
这个程序可以运行通过!
但是最后会有内存错误!这里面的原因是我想知道的!

楼上说的很清楚了。只是你听不明白。
你的语法没问题。
编译器也没问题。
只是你没有给指针分配内存。
指针强行占用空间是非法的,导致最后出现:该内存不能为read
就是不能读内存.
程序输出内容了只能证明:你的计算机内存利用率还没高的没有空闲内存的状态。这样就非法利用了内存。如果你同时大量运行这样的程序的话,就会导致传说中的系统崩溃。
也不知道你明白没。好好学习吧,有些问题,会随着学习时间的推移,自己就会明白的。。

对内存的分配和回收处于混乱的状态
释放a所占据的堆内存应该使用delete a;
#include<iostream>
using namespace std;
void main()
{
int t=0;
int *a=&t;
a = new int[13];//这里加一句
for(int i=0;i<13;i++)
a[i]=i;
for(i=0;i<5;i++)
cout<<a[i]<<endl;
delete a;
}

你这样用指针是不对的 虽然可以执行但会引起内存超界 会把原内存的数据覆盖
指针使用时是要先分配内存在写入数据的 当然指针是可以当成数组用的
例如 int *a;
a=(int *)malloc(10*sizeof(int));
这就可以当作a[10]的数组用
最后一句会报错是null应该大写NULL

编译器只认识语法,懂语义的编译器,估计近期开发不出来