传递动态分配的2D char数组会导致分段错误?

时间:2019-06-17 01:32:24

标签: c++

我在使用功能时遇到问题。

我有两个职能。

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

printTwoDArray:应采用2d数组并打印所有内容。但是,调用此函数时,会立即发生分段错误。函数中没有一行代码被称为偶数。

谢谢:)

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
//

1 个答案:

答案 0 :(得分:2)

有两个错误:“列”用于分配行,并且在调用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;
}