簡體   English   中英

使用malloc在C ++中動態分配結構

[英]Dynamically allocating a structure in C++ using 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;
}

我的問題是為什么這是錯誤的,因為當我嘗試運行此代碼時,我遇到了分段錯誤。 我使用GDB調試器查看是哪條線導致了該問題,而這是導致此問題的那條線:

cin >> article[i].productName;

為什么? 這困擾了我好幾天...

使用new運算符分配內存時,它會執行以下兩項操作:

  1. 它分配內存來保存對象;
  2. 它調用構造函數來初始化對象。

在您的情況下( malloc ),您僅執行第一部分,因此您的結構成員未初始化。

未初始化article[0] (即未為article[0]調用struct product的構造struct product )。 因此, article[0].productName也未初始化。

使用new product[n]而不是(product*) malloc(n * sizeof(product))初始化數組元素(並通過傳遞性實現元素的成員)。

嘗試使用此:

#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;
}

使用cin時未初始化article [0]。 如果改用new[] ,它應該可以工作。

代替malloc-ing對象,使用new

product *article = new product[n];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM