【发布时间】:2018-01-28 04:16:36
【问题描述】:
在下面的代码中,我是否需要“释放”指向使用 malloc 分配的内存区域的指针?释放主指针还不够吗?
char * parentArray = malloc( 10 * sizeof(char));
char * miniArray = &parentArray [1];
free(myArr);
// free(miniArray) ?
【问题讨论】:
-
你分配了一个这样的内存区域,比如说
[0, 1, 2, 3, 4],使用malloc。Malloc将返回一个指向分配内存的第一个位置的指针,即*ptr = [0]。即使您可能有 1000 个指针指向 0-4 之间的任何内存区域(已分配),但当您释放内存时,您必须使用已分配区域的第一个地址进行释放。例如,如果你有 10 个指针指向分配的内存区域的第一个地址,那么只有一个free就足够了。我希望我能说清楚。 -
更清楚一点,1
malloc意味着 1free,即一对一的“映射”。 -
什么是
myArr?仅供参考:miniArray指向内存,但不是分配的开始,所以注释掉的free(miniArray)会失败。 -
规则很简单:每次分配只释放一次。