找到程序中分配的内存?

时间:2012-12-05 06:07:17

标签: c memory-management malloc

  

可能重复:
  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?

2 个答案:

答案 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的函数,可以告诉你在进程处于运行状态时泄漏了多少内存。