所以我正在尝试创建一个内存管理系统。为了做到这一点,我有一定数量的空间(由 malloc 分配),然后我有一个函数 myMalloc,它实际上将返回一个指向已分配空间的指针。由于我们将尝试释放它,因此我们尝试使用 memset 将分配空间的标头设置为分配空间的大小。
memset(memPtr,sizeBytes,sizeof(int));
然后我们需要能够读取它,以便我们可以看到它的大小。我们试图通过使用 memcpy 并将第一个 sizeof(int) 字节放入变量中来做到这一点。出于测试目的,我们只是尝试执行 memset,然后立即恢复大小。我在下面包含了整个方法,以便您可以查看所有声明。任何帮助将不胜感激!谢谢!
void* FirstFit::memMalloc(int sizeBytes){
node* listPtr = freelist;
void* memPtr;
// Cycle through each node in freelist
while(listPtr != NULL)
{
if(listPtr->size >= sizeBytes)
{
// We found our space
// This is where the new memory allocation begins
memPtr = listPtr->head;
memset(memPtr,sizeBytes,sizeof(int));
void *size;
memcpy(size, memPtr, sizeof(int));
// Now let's shrink freelist
listPtr->size = listPtr->size - sizeBytes;
int *temp = (int*)listPtr->head + (sizeBytes*sizeof(int));
listPtr->head = (int*) temp;
return memPtr;
}
listPtr = listPtr->next;
}
::编辑:: 对不起!运行此程序时,我们在尝试运行 memcpy 行时不断收到段错误。在过去的一个小时左右,我们一直在玩不同的想法,老实说,只是不知道错误发生在哪里。
::Edit2:: 我也将此作为评论发布,但我想我也会把它放在这里,所以更容易找到......
我们的问题是我们有一个允许使用的分配空间,由一个 malloc 调用指定为 128MB。我们只能使用这个,所以我们不能使用 malloc 将大小初始化为任何东西。我想,有没有办法在不初始化大小的情况下做到这一点。如果没有,是否可以在不使用 memcpy 的情况下获取标头设置为的 int。