[英]C struct memory allocation using realloc
我使用以下代码来通过增加大小size
并重新分配内存来向我的Struct数组( mystructs
)动态分配更多内存:
int size = 1;
MyStruct *mystructs = NULL;
MyStruct *tmp = NULL;
tmp = realloc(mystructs, sizeof(MyStruct) * size);
mystructs = tmp;
我的问题是,即使我使用size = 1
它仍然会分配比该大小所需的内存更多的内存,因为当我开始使用printf()打印出结构值时,尽管它通常可以打印出数百个数组元素应该只包含1个元素。 打印出来意味着调用类似的东西: printf("%d", mystructs[i].value);
。 为什么在i
最终发现段错误之前,由于我不应该访问内存,所以为什么i
的值可能是几百?
由于读取超出分配的空间是不确定的行为,因此它的行为不一定总是完全相同,因此有可能读取超出分配的空间,但这是不正确的。
有时会发生细分错误。
因此,您可以毫无问题地继续阅读,并且突然出现segmentation fault
。
能够读取内存并不意味着您可以这样做。
正如其他人指出的那样,该库可能只是从OS中获得了比所需更多的内存。
但是也有可能它只使用位于其他内存之前的内存。
因此,即使您可以阅读,也不应阅读,因为您永远不会知道。 而且,最重要的是:不要在那里写-程序可能还会使用其他变量!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.