这些最最简单的语句也有内存相关的错误?
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个元素)就越界了