<目次>
(1) C++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use)」エラーについて
(1-1) 事象・発生状況
(1-2) 原因
(1-3) 対策
(1-4) 参考
(1) C++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use)」エラーについて
(1-1) 事象・発生状況
●エラーメッセージ
Debug Assertion Failed! Program: XXXX Line XXX Expression: _CrtIsValidHeapPointer(block)
(図111)
Debug Assertion Failed! Program: XXXX Line XXX Expression: is_block_type_valid(header->_block_use)
(図112)
●事象発生のサンプルプログラム
#include <iostream> using namespace std; int main(void) { int n1 = 10; int* n1p = &n1; delete[] n1p; }
(1-2) 原因
●メッセージ「_CrtIsValidHeapPointer」の原因
int n1 = 10; int* n1p = &n1; delete[] n1p;
●メッセージ「is_block_type_valid(header->_block_use)」の原因
int n1 = 10; int* n1p = &n1; delete n1p;
(1-3) 対策
int* n1p = new int; n1p[0] = 10; delete n1p;
(1-4) 参考
●参考1
ちなみに、上記の②と③のケースはエラーではなく、下図のような警告になるようです。単一の非配列オブジェクトの場合は「new」と「delete」で、逆に配列オブジェクトの場合は「new []」と「delete[]」を使います。
●参考2:②と③のNGで起きている事
int* n1p = new int[10];