malloc 分配内存问题

[复制链接]
查看11 | 回复5 | 2011-1-3 23:36:11 | 显示全部楼层 |阅读模式
#include
#include
int main(int argc, char *argv[]){
int *pp=(int *)malloc(sizeof(int)*3);
pp[10]=100;
printf("%d\n",pp[10]);
return 0;
}
这段程序我明明只给pp分配了3个int大小的内存,但是我却能访问到10,如果是int pp[10];这样就会报错吧,不是说数组就是一个指针吗,求解

回复

使用道具 举报

千问 | 2011-1-3 23:36:11 | 显示全部楼层
内存空间是连续的,pp 10访问的是一个未初始化的空间。你还可以访问11、12。但是一旦访问的内存是其他程序在使用的部分,那么你的这个程序就会报错了。
回复

使用道具 举报

千问 | 2011-1-3 23:36:11 | 显示全部楼层
malloc的功能是分配内存空间,可能并没有规定界限吧
回复

使用道具 举报

千问 | 2011-1-3 23:36:11 | 显示全部楼层
都不会在编译时报错,但是属于逻辑错误即下标越界,需要调试环境和程序员自己控制
回复

使用道具 举报

千问 | 2011-1-3 23:36:11 | 显示全部楼层
C语言不检查数组越界,你可以在程序中访问、修改分配内存之外的内存,但一般运行的时候会报错。
回复

使用道具 举报

千问 | 2011-1-3 23:36:11 | 显示全部楼层
能访问到PP10但是 PP10在你申请的内存范围内.此种操作属于内存越界.但是不是所有的编译器都会报错.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行