Foo* set = new Foo[100];
// ...
delete [] set;
Run Code Online (Sandbox Code Playgroud)
您没有将数组的边界传递给delete[].但是这些信息存储在哪里?它是标准化的吗?
给定两个类只有原始数据类型,没有自定义析构函数/解除分配器.C++规范是否保证它将以正确的大小解除分配?
struct A { int foo; };
struct B: public A { int bar[100000]; };
A *a = (A*)new B;
delete a;
Run Code Online (Sandbox Code Playgroud)
我想知道我需要写一个空的virtualdtor吗?
我试过g ++和vc ++ 2008,它们不会导致泄漏.但我想知道C++标准中的正确性.
malloc()和free()在哪里存储分配的地址及其大小(Linux GCC)?我已经读过一些实现将它们存储在实际分配的内存之前的某个地方,但是在我的测试中我无法确认.
背景,也许有人有另一个提示:我正在尝试分析进程的堆内存,以确定另一个进程中字符串的当前值.访问进程堆内存并在其中漫步是没有问题的.但是,因为字符串的值发生了变化,并且进程每次都会分配内存的新部分,所以字符串的地址会发生变化.因为字符串有一个固定的格式,它仍然很容易找到,但经过一些更改后,旧版本的字符串仍然在堆内存中(可能已释放,但仍未被重用/覆盖),因此我无法分辨哪个字符串是当前字符串.
所以,为了仍然找到当前的那个,我想检查我在内存中找到的字符串是否仍然被使用,通过比较它的地址与malloc/free知道的地址.
ciao,Elmar
我有一个指向Base* base_ptr多态对象的指针.是否有可能找出所述对象的动态类型的大小?
AFAIK,sizeof(*base_ptr)yilds的静态类型的大小base_ptr.我开始怀疑这是不可能的,但也许我忽视了一些事情.
注意:我知道我可以在我的类型层次结构中添加一个返回大小的虚函数,但在我的情况下这不是一个理想的解决方案.
编辑:sizeof(base_ptr)- >sizeof(*base_ptr)