开发者

C free() routine and incremented array pointers

Will the free() routine work if I dynamically allocate an array and then开发者_JAVA技巧 pass, not the initial pointer, but a pointer to the middle of the array? Example:

int* array = malloc(10 * sizeof *array);
if(array) {

  array += 5; // adjusting the indicies

  free(array);
}

Or do I need to set the pointer back to the start of the array before calling free()?


Absolutely not. The value passed to free() must be exactly the same value returned by malloc(). In fact, to ensure this is the case, I would recommend you use a copy of the pointer if you need a pointer you can increment or otherwise modify.


No

(And "Yes", you do need to "set it back".)

The API requires that you only pass to free() exactly what you got from malloc()1.


1. Or a null pointer.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜