c++ - 当通过 New 调用时,Constructor 中的 Malloc 返回 NULL

标签 c++ constructor

<分区>

我最近开始学习c++(我已经有中级的c)。我了解构造函数背后的思想及其工作原理,但我不明白为什么当我使用 new 创建 Packet 对象时,构造函数中的 malloc 返回 NULL/0x0 内存位置。如果我定义一个 Packet 对象,我对构造函数中的 malloc 没有问题。 这是代码,希望对格式/编码进行任何更正:

#include <iostream>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

class Packet
{
    public:
        unsigned int size_pck;
        char *packet_data;

    Packet(unsigned int size)
    {
        size_pck=size;
        char *packet_data=(char *)malloc(size);
    }

    ~Packet()
    {
        free(packet_data);
    }



};

int main (void)
{
    Packet *created_pck;
    created_pck=new Packet(4);

    return 0;
}

最佳答案

首先,您正在创建一个局部变量 - 而不是分配给您的成员:

Packet(unsigned int size)
{
    size_pck=size;
    packet_data=(char *)malloc(size);
}

另一方面,在 C++ 中已经有一种方便的方法来保持动态大小的 char 数组。小号:std::vector :

class Packet {
    std::vector<char> packet_data;
public:
    Packet(unsigned int size)
    : packet_data(size)
    { }
};

当你复制你的 Packet 时,这有一个额外的好处,即不会泄漏内存。 .或者,或者,std::unique_ptr<char[]>使用 extra size 成员,以避免初始化 char s - 如果这很重要。

关于c++ - 当通过 New 调用时,Constructor 中的 Malloc 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376976/

相关文章:

c++ - 为具有内部指针的对象实现 swap()

c++ - 导致访问冲突错误的数组条目删除

c++ - 在 vb.net 中通过引用传递 const 参数

java - 使用构造函数查找孪生素数

C#,将字符串变量转换为类变量

c++ - 相同的 const 类型限定符

c++ - 编译c++程序的内存分配代码时出错

c++ - 如何使用结构构造函数初始化结构内部的指针数组?

java - 在java中使用反射动态实例化类失败

c++ - 为什么在将临时返回对象分配给引用时需要公共(public)复制构造函数?