繁体   English   中英

使用realloc的C struct内存分配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM