だから私はメモリ管理システムを作成しようとしています。これを行うために、(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行を実行しようとすると、セグメンテーション違反が発生し続けます。私たちは過去1時間ほどさまざまなアイデアで遊んでいますが、正直なところ、エラーがどこで発生しているのかわかりません。
:: Edit2 :: これもコメントとして投稿しましたが、ここにも載せると思ったので見つけやすかったです...
私たちの問題は、128MBの1回のmalloc呼び出しで指定された、作業が許可されているスペースが割り当てられていることです。これしか使用できないため、mallocを使用してサイズを初期化することはできません。サイズを初期化せずにこれを行う方法はあると思います。そうでない場合は、memcpyを使用せずにヘッダーが設定されているintを取得する方法はありますか。