理解を助けてください - なぜこの実行時エラーが発生するのですか:
*** スタック破壊が検出されました ***:
プログラムはシグナル SIGABRT を受信しました。中止されました。
次のコードの場合:
#define WORD_SIZE (sizeof(int))
#define FLOOR_MASK 0xfffffffc
static void SetVal(void* _block, int _size)
{
*(int*)_block = _size;
}
void BufferInit(void* _buffer, size_t _totalSize)
{
int alignedSize;
assert(_buffer);
/* align _totalSize to be WORD_SIZE multiple */
alignedSize = _totalSize & FLOOR_MASK;
/* mark end of buffer */
SetVal(_buffer + alignedSize, END_VAL);
}
int main()
{
Byte buffer[36];
BufferInit(buffer, 37);
return 0;
}
PS: 実行の最後にエラーが発生します (オンライン"return 0;"
)。
ありがとう。