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

指针访问越界?解决思路

2012-02-14 
指针访问越界?C/C++ codeint main(){short *p2 NULLp2 (short*)malloc(1000)if(NULL p2){return}

指针访问越界?

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的时候需要用到
[解决办法]
越界了

热点排行