【发布时间】:2014-09-26 02:09:15
【问题描述】:
如何恢复 memset 的值?
在下面的代码中,程序应该分配一定数量的用户请求的空间,并在返回给用户的指针之前存储用户请求的大小:
void* my_malloc(size_t sz)
void* block = malloc(sz + sizeof(size_t));
void* retval = &block + sizeof(size_t);
memset(block, sz, sizeof(size_t));
return retval;
在另一个函数中,用户可以传入他们数据的指针,我想恢复我存储在他们内存之前的大小。
void my_free(void *ptr) {
void* block = ptr - sizeof(size_t);
size_t *sz;
memset(sz, block, sizeof(size_t));//This is the line in question.
free(block);
有什么 memread 函数可以用来重置 sz 的值吗?这个当前的方法给了我错误
【问题讨论】:
-
我认为您对
memset()的调用不会像您认为的那样。根据您的描述,您根本不想使用memset()。 -
除了错误地使用
memset之外,你在my_malloc中对retval的计算也完全是假的。