c++ - 访问 2D 结构时程序崩溃

标签 c++ arrays pointers struct 2d

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

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

输入:整数 5,整数 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;
}

最佳答案

你的初始化错误

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

这是创建一行,并将其分配给每一行。

你可能打算这样做:

values** tab = new values*[row];

for (int i = 0; i < row; i++)
{
    tab[i] = new values[col];
}

话虽如此,您确实应该使用 std::arraystd::vector

此外,这就是导致崩溃的原因,在 set_m_values 中,您有一个不正确的比较:

for (int j = 0; i < col; j++){ // notice the i in there

应该是:

for (int j = 0; j < col; j++){ // replaced i with j

很可能是您复制粘贴而忘记更改它。我想强调一个事实,您真的应该为此使用 vector 等标准库容器。例如你可以:

// with this you don't need the create_table function
std::vector< std::vector<values> > table(row, std::vector<values>(col));

P.S:您的代码中存在内存泄漏,因为未调用删除。这不是 std::vector

的问题

关于c++ - 访问 2D 结构时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18157987/

相关文章:

c++ - 释放获取语义以计算平均值的下限和上限

C - 数组下标不是整数

arrays - fscanf 一个数字并将每个数字存储在数组中

javascript - 创建 Javascript 数组对象

c++ - 在 C++ 中使用指针访问多维数组元素

c - 分配之间的差异

c++ - SSE 内联汇编和可能的 g++ 优化错误

c++ - 使用 cout 打印小数点后的 X 数

c++ - RCPP:加快读取具有大矩阵(ESRI ASCii格式)的文本文件的速度

pointers - 指向结构体的指针(或缺少结构体的指针)