【发布时间】:2017-01-02 16:29:18
【问题描述】:
我正在制作一个动态内存分配器,我需要检查当我释放它的一部分时,我传递给函数的指针实际上是否在该区域内。我有一个指向 malloc'd 区域开头的指针
typedef unsigned char byte;
static byte *memory // pointer to start of allocator memory
我在启动函数中分配的。我还存储了 malloc'd 区域的大小
static u_int33_t memory_size; // number of bytes malloc'd in memory[]
如何确保 ptr 不是...(在伪代码中)
ptr < *memory || ptr > *memory + memory_size
并且该代码导致以下错误;
错误:不同指针类型的比较缺少强制转换 [-Werror] 如果(对象(内存+内存大小)) ^
我不确定我需要投射什么,不应该投射什么......
免费功能如下...
void memfree(void *object)
{
if ( object < memory || object > (memory + memory_size)) {
fprintf(stderr, "vlad_free: Attempt to free via invalid pointer\n");
exit(EXIT_FAILURE);
}
}
【问题讨论】:
-
这似乎与以下内容重复:stackoverflow.com/questions/3065092/…
-
那么,您的动态分配器有一个要分配的内存库,这一定是连续的?
byte的类型是什么?u_int33_t的类型是什么?你提出的表达方式有什么问题?您的代码的可移植性如何? -
@Jaime:我认为你提到的问题比这个问题中提出的问题更笼统。
-
对不起,typedef unsigned char byte;便携性不是问题
-
以后,请在问题中添加请求的信息——您可以编辑自己的问题。我已经为你添加了
byte的 typedef。