C++ 访问二维结构时程序崩溃

C++ 访问二维结构时程序崩溃,c++,arrays,pointers,struct,2d,C++,Arrays,Pointers,Struct,2d,所以我花了无数个小时试图找到这个问题的答案。我发现了一些接近它的东西,但不完全如此,所以我想我会在这里发布 我正在尝试创建一个二维结构数组。我将调用一个函数来创建结构并将值输入到结构中。这是一个可能输出的示例: 输入:int 5,int 5 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 我能够创建结构,但当我尝试输入值时,我的程序不断崩溃。任何输入都将是伟大的!下面是我的代码 struct values{ int mul

所以我花了无数个小时试图找到这个问题的答案。我发现了一些接近它的东西,但不完全如此,所以我想我会在这里发布

我正在尝试创建一个二维结构数组。我将调用一个函数来创建结构并将值输入到结构中。这是一个可能输出的示例:

输入:int 5,int 5

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
我能够创建结构,但当我尝试输入值时,我的程序不断崩溃。任何输入都将是伟大的!下面是我的代码

struct values{
int mult;
float div;
};

values** create_table(int row, int col){
values** tab = new values*[row];
values* one_row = new values[col];
for (int i = 0; i < row; i++){
    tab[i] = one_row;
}
return tab;
}

void set_m_values(values** tab, int row, int col){
for (int i = 0; i < row; i++){
    for (int j = 0; i < col; j++){
        tab[i][j].mult = (i+1)*(j+1);
    }
}
}

int main() {
int row = 5;
int col = 5;
values** tab = create_table(row, col);
set_m_values(tab, row, col);
for (int i = 0; i < row; i++){
    for (int j = 0; j< col; j++){
        cout <<tab[0][i].mult;
    }
    cout <<endl;
}
return 0;
}
struct值{
int mult;
浮动div;
};
值**创建表格(整数行,整数列){
值**选项卡=新值*[行];
值*一行=新值[col];
对于(int i=0;icout您的初始化错误

values* one_row = new values[col];
for (int i = 0; i < row; i++){
    tab[i] = one_row;
应该是:

for (int j = 0; j < col; j++){ // replaced i with j
for(int j=0;j
很可能是复制粘贴而忘记更改。我想强调的是,您确实应该使用标准库容器(如vector)来执行此操作。例如,您可以:

// with this you don't need the create_table function
std::vector< std::vector<values> > table(row, std::vector<values>(col));
//这样就不需要create\u table函数了
std::vector表(行,std::vector(列));

注:你的代码内存泄漏,因为没有调用删除。这不是你在
std::vector

中会遇到的问题,请尝试缩进。哎呀!非常感谢!!!!我不敢相信,是该死的I,j开关引起了我这么多的头痛。我花了两天多的时间试图弄清楚到底发生了什么错。整个过程中,我一直认为问题主要在于我对指针数组和结构的操作,但实际上这是一个变量切换。我现在很想踢自己。再次感谢你花时间检查这个问题。哦,这是一个糟糕的复制粘贴工作。我在早期版本中犯了这个错误,并开始了一个新的C++我不知道,我也复制了同样的错误>:[我很惊讶你在调试时没有注意到错误的索引发生了变化。
for (int j = 0; j < col; j++){ // replaced i with j
// with this you don't need the create_table function
std::vector< std::vector<values> > table(row, std::vector<values>(col));