<目次>
(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)
/RP-IT0520_112_ErrorImage.jpg)
Debug Assertion Failed! Program: XXXX Line XXX Expression: is_block_type_valid(header->_block_use)
(図112)
/RP-IT0520_111_ErrorImage.jpg)
●事象発生のサンプルプログラム
#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];