C语言中动态内存分配的问题

#include<stdio.h>#include<malloc.h>intmain(){int*p=(int*)malloc(1);inti;for(i=0;i<10;... # include <stdio.h>
# include <malloc.h>
int main()
{
int *p = (int *)malloc(1);
int i;
for(i=0;i<10;i++)
p[i] = i;
for(i=0;i<10;i++)
printf("%-3d",p[i]);
printf("\n");
return 0;
}
上面的代码只申请了一个字节的空间,下面使用的是至少四十个字节,可是运行却没有报错,其他字节的控制权限并没有给予这个程序啊,求大神解释一下,最好也能解释一下malloc函数的参数的意义。
用dev-c 没有问题,用vc++6.0运行后提示如图
VC的那个提示是在代码return 0;前加上free(p);之后出现的,不加也没有提示
展开
 我来答
20分钟假腿
2015-08-19 · TA获得超过118个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:116万
展开全部
这是C指针的一个弊端,编译器不会检查数组是否越界,但是你申请的只有一个空间,后面的空间是不能用的,用了会崩溃。
int *p = (int *)malloc(10 * sizeof(int));
应该申请十个int型空间,一般都是个数*一个类型所需要的字节数
追问
我知道正确的该怎么写,我就是想知道错误的却没有报错,系统也没有终止。
意思就是以后需要自己保证申请的内存大小是正确的,机器检查不出来!
追答
是的,编译器的一个弊端。所以要求程序员用的时候很小心,知道自己在做什么
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式