C++ 如何在动态2D数组中存储数据,该数组在C+中的另一个结构也使用的结构中声明+;

C++ 如何在动态2D数组中存储数据,该数组在C+中的另一个结构也使用的结构中声明+;,c++,arrays,dynamic,struct,C++,Arrays,Dynamic,Struct,我试图调试其他人的代码,但无法将文件中的数据读入头文件中声明的变量。我正在附加.C和.H文件中的代码段 //main.C #include <cstdio> #include <cstdlib> #include <cmath> #include <fstream> #include <algorithm> #include <iostream> #include <cstring> #include <

我试图调试其他人的代码,但无法将文件中的数据读入头文件中声明的变量。我正在附加.C和.H文件中的代码段

//main.C

#include <cstdio>
#include <cstdlib> 
#include <cmath>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include "test.H"
int main()
{
 Initialize();
 return(0);
}
要读取的文件

#######################  
0.658 1.291  
1.891 1.753  
#----------------------  
2.570 2.955  
3.747 3.417  
#----------------------  
3.658 4.141  
5.096 2.800  
#######################  
5.293 1.842  
4.518 1.511  
6.215 1.450  
#----------------------  
6.113 3.239  
5.960 3.966  
7.033 2.842  
#######################  
0.658 1.291  
1.919 1.720  
2.404 2.998  
#----------------------  
3.674 3.536  
4.073 3.004  
4.379 4.781  
#----------------------  
3.915 5.534  
3.063 5.270  
4.417 6.366  
#######################  
5.500 5.125  
5.850 4.551  
#----------------------  
5.997 5.958  
0.658 1.291  
#----------------------  
1.899 1.698  
2.455 3.008  
#----------------------  
3.751 3.337  
4.562 3.037  
#######################  
3.962 4.032  
2.945 4.456  
#----------------------  
1.997 4.312  
3.125 4.921  
#----------------------  
5.212 4.220  
5.982 3.896  
#----------------------  
5.386 4.685  
0.658 1.291  
#----------------------  
1.873 1.711  
2.481 2.999  
#######################  
1.556 4.164  
#----------  
0.658 1.291  
#######################  
1.891 1.753  
#----------------------  
0.658 1.291  
#----------------------  
1.919 1.720  
#######################  
0.658 1.291  
1.841 1.793  
1.894 1.773  
#######################  
0.658 1.291  
1.894 1.773  
2.486 3.006  
#----------------------  
3.032 2.690  
3.045 1.710  
3.546 3.682  
#----------------------  
3.561 4.989  
3.219 5.337  
3.915 5.627  
#######################  
3.995 3.220  
3.982 2.227  
#---------------------  
4.348 3.863  
1.467 4.890  
#---------------------  
1.467 4.890  
2.201 4.539  
#---------------------  
2.842 3.762  
2.115 5.051  

我知道
sub_objs
定义有问题。但我不知道是什么。为了在公共论坛上发表文章,我不得不稍微修改变量和代码。请记住与此相关的任何错误,并提供帮助

那么这部分做什么呢

struct SUBOBJECTS
{
 SUBOBJECTS(int size)
 {
  coords = new double[size][2]; // [2]
 }
 double (*coords)[3]; // [3]
};
它声明一个包含3个double的数组,然后发布一个包含2个double的数组。 这可能会导致严重的问题


如果
num
的大小为10,则为20个双人房间分配空间,但为30个双人房间声明空间。

对象
构造函数中,您有以下行:

std::vector<SUBOBJECTS> sub_objs(number,size);
std::向量子对象(数量、大小);
它声明了一个名为
sub_objs
的局部变量。一旦析构函数退出,这些变量就会超出范围。它也与
OBJECTS::sub_objs
成员变量没有任何关系

因此,您永远不会在任何地方初始化
OBJECTS::sub_objs
成员变量,这意味着它的值将是不确定的,以任何方式使用它都将导致未定义的行为和您看到的崩溃

有两种解决方案:

  • 由于成员变量是指针,因此需要使用
    new[]
    为其分配内存

  • 将成员变量的类型更改为向量,并在
    OBJECTS
    构造函数初始值设定项列表中构造它


  • 您是否有生成错误(您应该!)?然后请包括完整的生成输出,完整且未经编辑。通过编辑您的问题,将其包含在问题正文中。另外,请学习如何创建一个。此外,无论何时,当你认为你需要一个“动态数组”,你的下一个想法应该是。另外,您是否考虑过在结构中更好地分组值,而不是使用数组向量(或向量向量向量),因此您只使用结构向量(或数组)?这可能会帮助您解决一些问题(甚至可能更符合逻辑)。我已经编辑了代码,现在它可以很好地编译,并在提到的行中复制分段错误。您希望这行代码做什么?谢谢你的关注。我已经编辑了代码,现在它复制了我希望它复制的错误。
    #######################  
    0.658 1.291  
    1.891 1.753  
    #----------------------  
    2.570 2.955  
    3.747 3.417  
    #----------------------  
    3.658 4.141  
    5.096 2.800  
    #######################  
    5.293 1.842  
    4.518 1.511  
    6.215 1.450  
    #----------------------  
    6.113 3.239  
    5.960 3.966  
    7.033 2.842  
    #######################  
    0.658 1.291  
    1.919 1.720  
    2.404 2.998  
    #----------------------  
    3.674 3.536  
    4.073 3.004  
    4.379 4.781  
    #----------------------  
    3.915 5.534  
    3.063 5.270  
    4.417 6.366  
    #######################  
    5.500 5.125  
    5.850 4.551  
    #----------------------  
    5.997 5.958  
    0.658 1.291  
    #----------------------  
    1.899 1.698  
    2.455 3.008  
    #----------------------  
    3.751 3.337  
    4.562 3.037  
    #######################  
    3.962 4.032  
    2.945 4.456  
    #----------------------  
    1.997 4.312  
    3.125 4.921  
    #----------------------  
    5.212 4.220  
    5.982 3.896  
    #----------------------  
    5.386 4.685  
    0.658 1.291  
    #----------------------  
    1.873 1.711  
    2.481 2.999  
    #######################  
    1.556 4.164  
    #----------  
    0.658 1.291  
    #######################  
    1.891 1.753  
    #----------------------  
    0.658 1.291  
    #----------------------  
    1.919 1.720  
    #######################  
    0.658 1.291  
    1.841 1.793  
    1.894 1.773  
    #######################  
    0.658 1.291  
    1.894 1.773  
    2.486 3.006  
    #----------------------  
    3.032 2.690  
    3.045 1.710  
    3.546 3.682  
    #----------------------  
    3.561 4.989  
    3.219 5.337  
    3.915 5.627  
    #######################  
    3.995 3.220  
    3.982 2.227  
    #---------------------  
    4.348 3.863  
    1.467 4.890  
    #---------------------  
    1.467 4.890  
    2.201 4.539  
    #---------------------  
    2.842 3.762  
    2.115 5.051  
    
    struct SUBOBJECTS
    {
     SUBOBJECTS(int size)
     {
      coords = new double[size][2]; // [2]
     }
     double (*coords)[3]; // [3]
    };
    
    std::vector<SUBOBJECTS> sub_objs(number,size);