0

可能重复:
如何从 C 中的指针获取数组的大小?
如何获取使用 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 ?

4

2 回答 2

2

您不能在 C 中以可移植的方式执行此操作。它可能不会存储在任何地方;malloc()可以保留比您要求的区域大得多的区域,并且不能保证存储有关您要求的数量的任何信息。

您要么需要使用标准大小,例如malloc(ARRAY_LEN * sizeof(int))or 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);
}
于 2012-12-05T06:12:52.343 回答
0

没有内置逻辑来查找分配给指针的内存。正如布赖恩在他的回答中提到的那样,您必须实施自己的方法。

是的,您可以使用 linux 上的 valgrind 等工具发现内存泄漏。在 solaris 上有一个库 libumem.so,它有一个名为 findleaks 的函数,它会告诉您在进程处于运行状态时泄漏了多少内存。

于 2012-12-05T06:24:24.160 回答