【问题标题】:Send and Return 2D dynamic struct from a function in C++从 C++ 中的函数发送和返回 2D 动态结构
【发布时间】:2015-06-03 01:20:35
【问题描述】:

我想从 C++ 中的函数发送和检索 2D 动态结构。我已经在一些网站上搜索过,但没有人可以工作。有人可以帮帮我吗?

这是我的功能:

122 void initializePopulation(Body* bodies, int nBodies, Body** kromosom_awal, int nKromosom)
123 {
124    time_t t;
125    time(&t);
126    typedef boost::mt19937 RNGType;
127    RNGType rng((unsigned int) t);
128    boost::uniform_int<> awal_dan_akhir(1, 10);
129    boost::variate_generator< RNGType, boost::uniform_int<> >
130                     acak(rng, awal_dan_akhir);
131    cout << "fungsi inisialisasi" << endl;
132    for(int i=0; i<nKromosom; i++)
133    {
134       for(int j=0; j<nBodies; j++)
135       {
136          cout << "nBodies: " << nBodies << " " << i << j << " " << kromosom_awal[i][j].x << " " << bodies[i].x << endl;
137          kromosom_awal[i][j].x = bodies[j].x;
138          kromosom_awal[i][j].y = bodies[j].y;
139          kromosom_awal[i][j].z = bodies[j].z;
140          kromosom_awal[i][j].dx = bodies[j].dx;
141          kromosom_awal[i][j].dy = bodies[j].dy;
142          kromosom_awal[i][j].dz = bodies[j].dz;
143          kromosom_awal[i][j].rho = (acak()/(double) 10);
144       }
145       cout << "nKromosom : " << i << " " << nKromosom << endl;
146    }
147 }

我是这样称呼这个函数的:

160 void goGA(XYZ* stasiun, int nStasiun, Body* bodies, int nBodies)
161 {
162    //initialize population
163    int nKromosom = 10;
164    Body *kromosom_awal[nKromosom];
165    initializePopulation(bodies, nBodies, kromosom_awal, nKromosom);
166 }

但它给我一个错误:

Segmentation fault: 11

我的错误在哪里?

哦,顺便说一句,这是我的结构声明:

 17 typedef struct Body
 18 {
 19    double x;
 20    double y;
 21    double z;
 22    double dx;
 23    double dy;
 24    double dz;
 25    double rho;
 26 }Body;
 27 
 28 typedef struct Response
 29 {
 30    double x;
 31    double y;
 32    double z;
 33    double grav;
 34 }Response;
 35 
 36 typedef struct gen
 37 {
 38    double x;
 39    double y;
 40    double z;
 41    double rho;
 42 }gen;
 43 
 44 typedef struct XYZ
 45 {
 46    double x;
 47    double y;
 48    double z;
 49 }XYZ;

【问题讨论】:

    标签: c++ arrays struct 2d parameter-passing


    【解决方案1】:

    内存分配有问题。

    1) Body *kromosom_awal[nKromosom]; 为 nKromosom 指针分配内存,但数据的分配内存在哪里?

    2) Body* bodies 的内存是否分配在 goGA 函数之外?

    【讨论】:

    • 1) 你能介绍一下如何为它分配内存吗? 2)是的,我已经在主函数中为Body* bodies分配内存:Body* bodies = (struct Body *) malloc ((nBodies + 1) * sizeof(*bodies));
    • 使用 malloc 对于 C++ 来说并不典型。但如果你愿意,你可以像for (int i=0; i &lt; nKromosom; i++) kromosom_awal [i] = (Body*) malloc (sizeof(Body));这样循环
    • 谢谢@VolAnd。是工作。那么,不使用malloc,C++ 中典型的分配内存是什么?
    • new 是分配(如malloc),delete 是释放(如free)。阅读更多cplusplus.com/reference/new/operator%20new
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多