【发布时间】:2010-09-18 23:05:32
【问题描述】:
我已经分配了一个mystruct 大小为n 的“数组”,如下所示:
if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) {
/* handle error */
}
后来,我只能访问p,而不再拥有n。有没有一种方法可以确定仅给定指针p 的数组的长度?
我认为它必须是可能的,因为free(p) 就是这样做的。我知道malloc() 会跟踪它分配了多少内存,这就是它知道长度的原因;也许有办法查询这些信息?比如……
int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct)
我知道我应该重新编写代码以便我知道n,但如果可能的话我宁愿不这样做。有什么想法吗?
【问题讨论】:
-
虽然答案都是“正确地做”,但这是一个非常好的问题。所以有一个upvote ;)
标签: c memory-management pointers malloc