指针访问越界?解决思路
指针访问越界?C/C++ codeint main(){short *p2 NULLp2 (short*)malloc(1000)if(NULL p2){return}
指针访问越界?
C/C++ codeint main(){ short *p2 =NULL; p2 = (short*)malloc(1000); if(NULL == p2) { return; } p2[900] = 1; free(p2); system("pause"); return 1;}
程序在运行时产生访问访问异常,我想原因应该出现在p2[900] = 1;上。
如果是数组的话p2[900]所处的内存地址应该是900*2=1800,已经越过了所分配的1000,执行语句后指针为1800。下面再调用free(p2)时,由于p2已经移动了1800字节,所以调用free语句会产生异常。不知我分析得对不对,如果不对请高手指正一下。
谢谢!!
[解决办法]前半部分对,后面说的不对。
free(p2); 没有异常;
就是 p2[900]越界了。
[解决办法]简单的解释: 数组越界;
实际上我们跟踪代码的运行,发现问题并不在下面的代码中:
p2[900] = 1;
而是发生在:
free(p2);
要说清楚这个问题可能并不容易,但可以给个抛砖引玉的提示:
在p2[900] = 1 这句的操作中改写了不属于程序申请到的内存, 如堆结构信息, 这些信息在free的时候需要用到
[解决办法]越界了