读书人

malloc的有关问题

发布时间: 2012-02-02 23:57:14 作者: rapoo

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中都不会存在了,因为他们都会检查是否越界,在编译的时候就会提示你.

读书人网 >C语言

热点推荐