【发布时间】:2010-12-07 06:32:18
【问题描述】:
我们能否检查传递给函数的指针是否在 C 中分配了内存?
我用 C 语言编写了自己的函数,它接受字符指针 - buf [指向缓冲区的指针] 和大小 - buf_siz [缓冲区大小]。实际上,在调用此函数之前,用户必须创建一个缓冲区并为其分配 buf_siz 的内存。
由于用户可能会忘记进行内存分配而只是将指针传递给我的函数,因此我想检查一下。那么有什么方法可以检查我的函数以查看传递的指针是否真的分配了 buf_siz 内存量.. ??
EDIT1:似乎没有标准库可以检查它..但是有没有什么肮脏的黑客可以检查它.. ??
EDIT2: 我知道我的函数会被优秀的 C 程序员使用……但我想知道我们是否可以检查……如果我们可以我想听听..
结论:因此无法在函数内检查特定指针是否分配了内存
【问题讨论】:
-
我真的不这么认为,但我没有足够的信心发布答案。
-
没有办法检查,除非你使用内存管理器或自己滚动。
-
如果它是一个字符指针,我们可以执行 strlen() 或 sizeof() 并检查分配了多少内存(当然,如果字符串以 NULL 结尾)。对于其他类型,我不确定有没有办法。!
-
我知道这是一个老问题,但可以在不使用 hack 的情况下跟踪分配的内存。我下面的代码提供了一些 sn-ps 来帮助您入门。
-
应该得出的结论是,即使有可能,您也不应该检查。 This article 解释了这个问题。虽然是用 Windows 术语编写的,但问题不是特定于 Windows 的。