首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这些最最简单的语句也有内存相关的异常

2012-04-02 
这些最最简单的语句也有内存相关的错误?doublep[]{1,2,3,4,5,6}doubleq[]{7,8,9,10,11,12}double*q1q

这些最最简单的语句也有内存相关的错误?
double   p[]   =   {1,2,3,4,5,6};
        double   q[]   =   {7,8,9,10,11,12};
        double*   q1;
       
        q1   =   p;
        for(int   i=0;   i <6;   i++)   q1[6+i]   =   q[i];  

        for(int   i=0;   i <12;   i++)cout   < <   *(q1+i)   < < "\n ";

为什么每次不能正常结束程序?

[解决办法]
q1[6+i] ? 越界了.
[解决办法]
double p[] = {1,2,3,4,5,6}; // p的长度是6
...
for(int i=0; i <6; i++) q1[6+i] = q[i]; // q1也就是p的长度就是6
[解决办法]
for(int i=0; i <6; i++) q1[6+i] = q[i];

q1指向的是p的首地址,6+i越界了,非法访问。
改成q1[i] = q[i];
是这个意思么?
[解决办法]
越界访问

程序退出时,报内存错误
[解决办法]
改成这样就OK了,把那个12也改成6:

double p[] = {1,2,3,4,5,6};
double q[] = {7,8,9,10,11,12};
double* q1;

q1 = p;
for(int i=0; i <6; i++) q1[i] = q[i];

for(int i=0; i <6; i++)cout < < *(q1+i) < < "\n ";

[解决办法]
明白你的意思,
这样修改:
double p[] = {1,2,3,4,5,6,0,0,0,0,0,0};
double q[] = {7,8,9,10,11,12};
double* q1;

q1 = p;
for(int i=0; i <6; i++) q1[6+i] = q[i];

for(int i=0; i <12; i++)cout < < *(q1+i) < < "\n ";
[解决办法]
double p[] = {1,2,3,4,5,6};
double q[] = {7,8,9,10,11,12};
相当于
double p[6] = {1,2,3,4,5,6};
double q[6] = {7,8,9,10,11,12};

q1 = p;
可以简单的理解用q1替换p进行数组操作,所以超过5(0到5正好6个元素)就越界了

热点排行