c++ - 传递动态分配的二维字符数组会导致段错误?

标签 c++

我在使用函数时遇到问题。

我有两个功能。

createTwoDArray:提示用户输入行和列的大小,创建一个新的二维数组并返回它,同时修改传递给它的行和列变量。

printTwoDArray:应该接受一个二维数组并打印所有内容。但是,调用此函数时,会立即发生段错误。函数内的一行代码都没有被调用。

谢谢你:)

int column, row;
char** createTwoDArray(int& column, int& row) {
   int min, max, i, j;
   cout << "\nPlease enter row size:";
   cin >> i;
   row = i;
   cout << "\nPlease enter column size:";
   cin >> j;
   column = j;
   char** dynamicArray2 = new char*[column];
   for(i = 0; i < row; i++) {
     dynamicArray2[i] = new char[column];
     for(j = 0; j < column; j++) {
       dynamicArray2[i][j] = '\0';
    }
   }
   return dynamicArray2;
}
void printTwoDArray(char** array, int row, int column) {
//
}

//
char** array2 = new createTwoDArray(column, row)
printTwoDArray(array2, column, row); //this causes the     segmentation error
//

最佳答案

有两个错误:'column'用于分配行,并且在调用 printTwoDArray() 时混淆了行和列。

这是固定代码。它在 Visual C++ 中运行良好。

#include "pch.h"
#include <iostream>

int column, row;
char** createTwoDArray(int& column, int& row) {
    int min, max, i, j;
    std::cout << "\nPlease enter row size:";
    std::cin >> i;
    row = i;
    std::cout << "\nPlease enter column size:";
    std::cin >> j;
    column = j;

    // *** Use row, not column to allocate the number of rows.
    char** dynamicArray2 = new char*[row]; 
    for (i = 0; i < row; i++) {
        dynamicArray2[i] = new char[column];
        for (j = 0; j < column; j++) {
            dynamicArray2[i][j] = '\0';
        }
    }
    return dynamicArray2;
}

void printTwoDArray(char** array, int row, int column) {
    printf("\nPrinting %d rows:\n\n", row);

    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            printf(" %2d", array[i][j]);
        }

        printf("\n");
    }
}

int main()
{
    //
    char** array2 = createTwoDArray(column, row);

    // Pass row and column in the right order!
    printTwoDArray(array2, row, column); 
    //

    return 0;
}

关于c++ - 传递动态分配的二维字符数组会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623799/

相关文章:

c++ - 初始化结构中的第一个元素

c++ - Makefiles - 继承类和内部类

c++ - 这个危险指针示例是否因为 ABA 问题而存在缺陷?

c# - 将它们从 CLI 传递到 C# 时 float 发生变化

c++ - fcntl() 中的第三个参数是什么

c++ - 如何以正确的编码保存文件?

c++ - 什么时候写模板尖括号(<...>)?

c++ - 如果 vector 是 vector 的 vector ,vector.swap() 和 vector.erase() 是否释放所有分配的内存?

c++ - 如何扫描另一个进程内存中的 INT 值

c++ - 如何使用 QOpenGLWidget 渲染文本