C语言malloc分配的空间,超出为啥也能正常使用?

嗜学如命的小蚂蚁 发布于 2016/01/28 10:03
阅读 788
收藏 0

@xpbob 你好,想跟你请教个问题:

    很不哈意思,老是麻烦您b( ̄▽ ̄)d……

    做练习的时候,发现malloc函数分配的空间,超出了也能照样使用,突然就不能理解了,那还要realloc干啥。假如说,超出了malloc分配的空间就不能使用,需要动态增加空间的话,那么新增加的空间,不还是malloc上限后面的那几个吗?毕竟要分配一个连续的空间嘛,假如后面的空间正好被其他重要软件占用,那么realloc应该怎么分配出新的空间,换个地方?这样的话空间不就不连续了吗?越想越迷糊……求指点

    测试了一下,分配一个空间,可以压入一个字符串


# include <stdio.h>
# include <string.h>
# include <malloc.h>

int main( void )
{
	char * str;
	
	str = ( char * )malloc( sizeof( char ) );
	
	strcpy( str, "abcdef" );
	
	puts( str );
	
	return 0;
}




加载中
0
xpbob
xpbob

你超过访问的长度肯定能继续,但是你破坏了其他地址的数据(当然后面的地址也不一定有人用,有人用肯定是破坏了)。

malloc分配的空间肯定是连续的,realloc会先探测后面的空间够不够,如果够就直接开辟,如果不够他会找一个新的地方开辟你要的空间,然后把内存内容拷贝到新开辟的空间。

你的例子肯定是有问题的,只不过你不知道你到底影响了谁,111222假如这是内存的数据111是脏数据(111就是你分配的)你改成abcd后就是abcd22你的abcd访问是没问题,但是222的数据就被损坏了

嗜学如命的小蚂蚁
嗜学如命的小蚂蚁
恩恩,您这么一讲解顿时就明白了,谢谢您了哈
0
S
Stieven
多读书
嗜学如命的小蚂蚁
嗜学如命的小蚂蚁
说的好有道理,我竟然无言以对
返回顶部
顶部