私のプログラムは C で書かれており、ディスク エミュレーターです。テストプログラムの特定の行をコメントアウトすると実行されますが、コメントを外すとメモリエラーが発生します。私はそれが私の char* にあると思われます。
コメントアウトした行 (およびプログラムがクラッシュする場所) は次のとおりです。
free(buffer);
ここで、buffer は、ディスクから読み取られたバイト文字列を表す char* です。malloc を使用して最初に 30 バイトが割り当てられました。
char* buffer = (char *) malloc(sizeof(char) * 30);
ここにすべてを投稿するには多すぎるので、誰かが私が間違っていることを見てくれることを期待して、書き込み/コピーしている部分を char* に入れます。
私はそれが複雑すぎるとは思いません.Cに十分に慣れていないだけで、明らかなメモリの間違いを認識することができません.
// In the event of a cache miss:
// block_buffer to pass to add_cache_entry
char cMissBuffer[BLOCK_SIZE];
// read content of block from disk
fread(cMissBuffer,sizeof(char),BLOCK_SIZE,diskEntity.pBlockStore);
// add to cache
if(1==add_cache_entry(i,cMissBuffer)) return 1;
.
.
.
// some of what is in add_cache_entry
int add_cache_entry(int v, char *block_buffer)
{
// ...
// construct a new queue element
QueueElement *block_to_cache = (QueueElement*)malloc(sizeof(QueueElement));
block_to_cache->blkidx = v;
block_to_cache->content=(char*)malloc(BLOCK_SIZE);
strcpy(block_to_cache->content,block_buffer);
// ...
}
テストでは、BLOCK_SIZE は 5、QueueElement は構造体、コンテンツは情報の BLOCK_BYTES を持つ char* です。
これは、実行可能ファイルの実行 (キューのダンプ) からの抜粋です...「\0」がないことが問題に関係している可能性があると思います...
after adding cache entry (5):
DUMP:
BLOCK 5 FLAG:0 CONTENT:222220000000
BLOCK 4 FLAG:0 CONTENT:222220000000
BLOCK 3 FLAG:0 CONTENT:000000000000
BLOCK 2 FLAG:0 CONTENT:000000000000
BLOCK 1 FLAG:1 CONTENT:11100
malloc が必要以上のスペースを割り当てるため、余分なスペースが得られると思いますが、それは正常なことだと読みました。
何かご意見は?