私は動的サイズのメモリプールのアイデアを試していましたが、失敗するだろうと確信していたが失敗しなかったいくつかのコードに行き着きました。コードは次のとおりです。
#include <iostream>
using namespace std;
struct largeStruct
{
largeStruct()
{
X = 123456789;
Y = 987654321;
str = "Hy! Here I am, a c string, out in the wild c++, the place where your pointers dangle and your friends play with your privates";
}
unsigned long long X;
unsigned long long Y;
char* str;
};
int main()
{
void* ptr = new unsigned char[sizeof(largeStruct)];
largeStruct a;
*((largeStruct*)ptr) = a;
cout << "Size of data: " << sizeof(largeStruct) << endl;
cout << "Data: " << endl;
cout << ((largeStruct*)ptr)->X << endl
<< ((largeStruct*)ptr)->Y << endl
<< ((largeStruct*)ptr)->str << endl
<< endl;
delete[] ptr;
}
それは私のPC(Windows 8、MSVC Express 2012)で動作します。もう少し考えてみると、ハックですが、ある程度の意味があると思います。メモリ内の配列は次のようになります。
===================================
... || a0 || a1 || a2 || ...
===================================
したがって、配列メンバーの 1 つよりも大きい値を格納しようとすると、側のメモリにアクセスします。したがって、3 チャンク サイズの値を保存しようとすると、次のようになります。
====================================
... || data data data data || ...
====================================
では、これは危険なのですか、それとも無害な無害なハッキングですか?