Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用MALOC动态分配C++中的一个结构_C++_C_Struct_Malloc_Allocation - Fatal编程技术网

用MALOC动态分配C++中的一个结构

用MALOC动态分配C++中的一个结构,c++,c,struct,malloc,allocation,C++,C,Struct,Malloc,Allocation,为什么??这困扰了我好几天…文章[0]没有初始化,即文章[0]没有调用结构产品的构造函数。因此,项目[0].productName也尚未初始化 使用新产品[n]而不是产品*mallocn*sizeofproduct来初始化数组元素,并通过元素的传递性来初始化元素的成员。使用新产品而不是malloc ing对象 cin >> article[i].productName; 当您使用新操作符分配内存时,它会做两件事: 它分配内存来保存一个对象; 它调用构造函数来初始化对象。 在mall

为什么??这困扰了我好几天…

文章[0]没有初始化,即文章[0]没有调用结构产品的构造函数。因此,项目[0].productName也尚未初始化


使用新产品[n]而不是产品*mallocn*sizeofproduct来初始化数组元素,并通过元素的传递性来初始化元素的成员。

使用新产品而不是malloc ing对象

cin >> article[i].productName;

当您使用新操作符分配内存时,它会做两件事:

它分配内存来保存一个对象; 它调用构造函数来初始化对象。 在malloc中,只执行第一部分,因此结构成员未初始化。

尝试使用以下方法:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct product{
        string productName;
        float price;
};

int main()
{
    struct product *article;
    int n=2; // n represent here the number of products
    article= (product*) malloc(n * sizeof(product));
    for(int i=0;i<n;i++)
    {
        cin >> article[i].productName; // <=> (article+i)->productName;
        cin >> article[i].price;
    }

    for(int i=0;i<n;i++)
    {
        cout << article[i].productName <<"\t" << article[i].price << "\n";
    }
    return 0;
}
product *article = new product[n];

使用cin时,项目[0]未初始化。如果你使用新的[],它应该工作。< /p>你能编译这个代码吗?把它当作一个对象的教训,为什么你不在C++程序中使用Maloc等。是的,我可以编译它,并且@ JoaAdNayLffffer-Yes,这是非常有用的;我无法想象我怎么能靠我自己来解决这个问题,谢谢,伙计。这一定是一个新的数组,不是吗?@YassineBakkar use std::vector articlen。然后,内存将自动释放。
#include <iostream>
#include <string>
using namespace std;
struct product{
    string productName;
    float price;
};

int main()
{
    int n = 2; // n represent here the number of products
    product *article = new product[n];
    for (int i = 0; i<n; i++)
    {
        cin >> article[i].productName; // <=> (article+i)->productName;
        cin >> article[i].price;
    }

    for (int i = 0; i<n; i++)
    {
        cout << article[i].productName << "\t" << article[i].price << "\n";
    }
    return 0;
}