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

malloc的有关问题

2012-02-02 
malloc的问题#includestdio.hintmain(intargc,char**argv){char*sintis(char*)malloc(sizeof(char)*1

malloc的问题
#include   <stdio.h>

int   main(int   argc,   char   **   argv)   {
        char   *s;
        int   i;
        s   =   (char   *)malloc(sizeof(char)   *   100);
        for   (i   =   0;   i   <   2000;   i++)   {
                s[i]   =   'c ';
        }
        printf( "s   =   %s\n ",s);
        return   1;
}
我分配了100的空间,但是能给s[1999]赋值,而且可以运行,这是为什么?

[解决办法]
c语言并不判断数组越界,所以赋值是可以的,但是很危险,因为你访问并修改了不属于你的内存。
并且s只是一个首地址。所以,你需要自己判断是否越界。

[解决办法]
能运行不代表可以这么做.
因为你只分配了100的空间,所以系统实际上记录的只有100个位子可以给你用,而你却用了2000个位置,就是说后面1900个位置都是占用的别人的,或许这1900个位置暂时没有人,可是系统并不知道,所以当另外的人向系统申请位置的时候,系统很可能把这1900个位置分配给别人,也就是说这1900个位置里面的内容对于你这段程序来说就用不了了,当然你也可以读取,可是读的内容不一定是对的.

因为C/C++程序为了效率的原因,并不检查程序越界,所以编译不会报错,单次运行可能成功,可能失败.这样的代码是不允许的.

实际上这个问题在C#和Java中都不会存在了,因为他们都会检查是否越界,在编译的时候就会提示你.

热点排行