gpt4 book ai didi

c++ - 当传递的内存指针不足时放置新的

转载 作者:行者123 更新时间:2023-11-30 01:28:05 24 4
gpt4 key购买 nike

我只是想知道当 placement new 传递给一个不足以分配的缓冲区时它会如何表现。但它似乎无论如何都成功了。这是我的代码:

#include <stdio.h>
#include <malloc.h>
#include <new>

class MyClass
{
public:
char data;
char data1;
};


int main() {
printf("sizeof MyClass: %lu\n", (unsigned long)sizeof(MyClass));

void *place = malloc(sizeof(MyClass) - 2);

MyClass *ptr = new (place) MyClass();

ptr->data = 10;
ptr->data1 = 20;
printf("%d\n", ptr->data1); //This seems to have work fine, storing the data as always
}

这是预期的行为吗?有人请解释这是怎么回事。谢谢。

PS:我使用的是 64 位 Ubuntu 系统,g++ 编译器。

最佳答案

在对于该类型而言不够大的内存块上调用 placement new 是未定义的行为。它可以(并且很可能会在真实程序中)破坏您的堆。

未定义的行为是未定义的,所以程序可以看起来正常进行,即使您可能正在破坏不属于您的内存。您的简单示例甚至没有尝试释放它分配的内存,因此您从未真正测试堆以查看它是否已损坏。

关于c++ - 当传递的内存指针不足时放置新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com