そのため、メモリ内の特定のポインターにアクセスしようとすると、セグ フォールトが発生します。私はコードを私が必要だと思うすべてのものに刈り込みましたが、何かを忘れた場合はお知らせください.
char memoryPool[100000];
static const int HEADER_NEXT = 4;
char* firstHole;
void initializeManager(void)
{
*( (void**)(memoryPool + HEADER_NEXT) ) = 0;
std::cout << "setting header next: " << (char**)(block + HEADER_NEXT) << std::endl;
firstHole = memoryPool;
}
int freeRemaining(void)
{
int result = 0;
char* block = firstHole;
while( block != 0 )
{
result += *( (int*)(block + HEADER_SIZE) );
std::cout << "running Result: " << result << std::endl;
std::cout << "header next: " << (char**)(block + HEADER_NEXT) << std::endl;
block = *( (char**)(block + HEADER_NEXT) ); // seg fault
}
return result;
}
端末出力は次のとおりです。
setting header next: 0x107e760e4
Entering freeRemaining
running result: 65536
header next: 0x107e760e4
Segmentation fault: 11
logout
アドレスは同じですが、なぜそのアドレスに格納されている値 (0) にアクセスできるのでしょうか?