【问题标题】:Dynamic 2d array is not creating properly动态二维数组未正确创建
【发布时间】:2011-03-18 13:01:15
【问题描述】:

我想通过函数创建一个动态二维数组,但似乎有些地方很不对劲。当我想往里面放东西时,它会抛出一个错误。

错误

在 0x003a19c8 处未处理的异常 p01.exe: 0xC0000005: 访问冲突 写入位置 0xcdcdcdcd。

CreateDynamicArray()

short int** CreateDynamicArray(int row, int col)
{
    // Creating variable
    short int** dynamicArray;

    // Creating rows
    dynamicArray = (short int**)malloc(row * sizeof(short int*));

    // Going trough every row and creating columns for them
    for (int i = 0; i < row; i++)
    {
        dynamicArray[row] = (short int*)malloc(col * sizeof(short int));
    }

    // Returning created array
    return dynamicArray;
}

main()

// Creating it
dynamicArray = CreateDynamicArray(row, col);

// Filling up with random numbers
for (i = 0; i < row; i++)
{
    randomNumber = rand() % 20;
    dynamicArray[i][n] = randomNumber; // Here it throws me exception
    for (n = 0; n < col; n++)
    {
        randomNumber = rand() % 20;
        dynamicArray[i][n] = randomNumber;
    }
}

附: 是的,这有点像家庭作业,但我仍然需要这件事的帮助:)

【问题讨论】:

    标签: c arrays dynamic


    【解决方案1】:

    row 更改为 i

    short int** CreateDynamicArray(int row, int col)
    {
        // Creating variable
        short int** dynamicArray;
    
        // Creating rows
        dynamicArray = (short int**)malloc(row * sizeof(short int*));
    
        // Going trough every row and creating columns for them
        for (int i = 0; i < row; i++)
        {
            dynamicArray[i] = (short int*)malloc(col * sizeof(short int));
        }
    
        // Returning created array
        return dynamicArray;
    }
    

    【讨论】:

    • 你的 malloc 转换是多余的,它是 C++ 的东西
    【解决方案2】:

    除了Gunner所说的,n变量用于循环,但是抛出异常的那行也使用了n变量。我认为你有一个逻辑错误:)

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2016-11-13
      • 2015-09-30
      • 2020-05-20
      相关资源
      最近更新 更多