可能重复:
How can I get the size of an array from a pointer in C?
How can I get the size of a memory block allocated using malloc()?
void func( int *p)
{
// Add code to print MEMORY SIZE which is pointed by pointer p.
}
int main()
{
int *p = (int *) malloc(10 * sizeof(int));
func(p);
}
如何从func()中的内存指针P找到MEMORY SIZE?
答案 0 :(得分:2)
你不能在C中以便携方式这样做。它可能无法存储在任何地方; malloc()
可以保留比您要求的区域大得多的区域,并且不保证存储有关您请求的数量的任何信息。
您需要使用标准尺寸,例如malloc(ARRAY_LEN * sizeof(int))
或malloc(sizeof mystruct)
,或者您需要使用指针传递信息:
struct integers {
size_t count;
int *p;
};
void fun(integers ints) {
// use ints.count to find out how many items we have
}
int main() {
struct integers ints;
ints.count = 10;
ints.p = malloc(ints.count * sizeof(int));
fun(ints);
}
答案 1 :(得分:0)
没有内置逻辑来查找为指针分配的内存。 你必须按照布莱恩在答案中提到的那样实现你自己的方法。
是的,你可以使用像linux上的valgrind这样的工具找到泄漏的内存。 在solaris上有一个库libumem.so,它有一个名为findleaks的函数,可以告诉你在进程处于运行状态时泄漏了多少内存。