指针访问越界?解决思路
指针访问越界?
程序在运行时产生访问访问异常,我想原因应该出现在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的时候需要用到
------解决方案--------------------
越界了
- C/C++ code
int 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的时候需要用到
------解决方案--------------------
越界了