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

malloc 函数动态的分配内存的有关问题

2012-06-14 
malloc 函数动态的分配内存的问题C/C++ code#include stdio.h#include stdlib.hvoid main(){char *str

malloc 函数动态的分配内存的问题

C/C++ code
#include "stdio.h"#include "stdlib.h"void main(){    char *str,*string;    string=(char *)malloc(1);    int n=0;scanf("%s",string);str=string;//free(string);while(*string!='\0')    {    printf("%c",*string);    n++;    string++;}     printf("字符串的长度为%d,指针大小%d\n",n,sizeof(string));}

一段代码如上。
问题是,使用malloc函数申请的内存大小仅为1,但是从键盘输入多个字符,依然能够被接受,被成功输入,只有偶然才有异常的情况。
请问,对于malloc申请内存的机制是什么? 操作系统不对动态存储区做指针越界检查么?那么这样是不是可能就造成了多个应用程序的内存区域冲突?
求原理,机制。

[解决办法]
C语言里没有内存边界检查,所以你输入后,其实你的内存已经越界了。你运气好没有crash。运气差的人很快就奔溃了。
[解决办法]
这个就是指针越界,操作系统不会检查的,要你自己检查。这种越界并不一定每次都会出问题,关键在什么时候会有内存冲突,假设总共有100个字节的内存,你申请了1个,然后其余的程序并没有申请过内存,那么你越界了就不会出错,如果别的程序正好申请了一个内存在你申请的后边,那你越界就会覆盖对方的数据。
[解决办法]
关于越界这种东西,行为是不确定的.
事实上是不会做严格检查的,你访问的是一个不受保护的区域就过去了,但是如果你访问到了受限制的内存区域,就会出现错误,就是那个经常出现的"can not be read"之类的错误了.
[解决办法]
自己越界,自担后果

热点排行