在cpp函数中初始化多个结构

Roy*_*nto 0 c++ struct

我想在循环中初始化结构并更新到数组.我正在使用以下代码.

#include <iostream>

struct Record {
    char *name;
};

struct Response {
    Record *records[];
};


int main()
{
    Response *response = new Response;

    for(int i=0; i<4; i++) {

        Record *record= new Record();

        char x[20];sprintf(x, "%d", i);

        record->name = (char*)x;

        response->records[i] = record;

        std::cout << "Inserting: " <<  x << "\n";

        //Not sure if I have to delete.
        delete record;
    }

    for(int i=0; i<4; i++) {
        std::cout << "Fetching: " << response->records[i]->name << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,打印数组中的所有项目都打印相同的值.关于什么可能出错的任何想法,评论或想法?

样本输出:

Inserting: 0
Inserting: 1
Inserting: 2
Inserting: 3
Fetching: 3
Fetching: 3
Fetching:
Fetching: 3
Run Code Online (Sandbox Code Playgroud)

mol*_*ilo 5

您将指向本地变量的指针存储在删除它们后访问的对象中.

即使Response::records尺寸合适,这两个因素也会使代码无效.

习惯用C++会使用std::stringstd::vector<Record>,但是如果你真的想要C风格的字符串和数组,这应该可行:

struct Record {
    char name[20];
};

struct Response {
    Record records[4];
};

int main()
{
   Response response;

    for(int i = 0; i < 4; i++) {
       Record record;
       sprintf(record.name, "%d", i);
       response.records[i] = record;
       std::cout << "Inserting: " <<  record.name << "\n";
    }

    for(int i = 0; i < 4; i++) {
       std::cout << "Fetching: " << response.records[i].name << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)