取消引用指针指针

时间:2015-12-11 23:10:21

标签: c++ arrays pointers

我正在尝试运行二维数组并使用指向int的指针更新值。

交换功能:

void foo(int ** vacancies, int **transfers, int transfer)
{
    for (int i = 0; i < transfer; i++)
    {
        (*transfers[i]) = 0;
        (*vacancies[i]) = 2;
    }
}

声明:

int ** vacancies = new int*[getVacancies(grid)];
int ** transfers = new int*[transfer];

函数调用:

foo(vacancies, transfers, transfer);

不幸的是,这似乎并没有真正更新任何值,我需要改变一些东西吗?谢谢!

编辑:

getVacancies(vacancies, grid, transfer);
getTransfers(transfers, grid, transfer);

    void getVacancies(int ** vacancies, int grid[][ROW], int vCount)
{
    for (int i = 0; i < vCount; i++)
    {
        for (int row = 0; row < ROW; row++)
        {
            for (int col = 0; col < COL; col++)
            {
                if (grid[col][row] == 0)
                {
                    vacancies[i] = &grid[col][row];
                }

            }
        }
    }
}

getTransfers也一样。

编辑2:

void getVacancies(int ** vacancies, int grid[][ROW], int vCount)
{
    int i = 0;
        for (int row = 0; row < ROW; row++)
        {
            for (int col = 0; col < COL; col++)
            {
                if (grid[col][row] == 0)
                {
                    vacancies[i] = &grid[col][row];
                    i++;
                }
            }
        }
}

3 个答案:

答案 0 :(得分:1)

您只分配了&#34;一个维度&#34;。这些int*元素应指向intint的数组。取消引用这些未初始化的指针是未定义的行为。

答案 1 :(得分:1)

我认为这是你需要初始化数组的方法。你不应该遍历vacancies,因为这会用每个元素填充一个指向同一元素grid(最后一个空元素)的指针。相反,您只想循环遍历grid,并将每个空白元素添加到vacancies中的下一个条目。

我还更改了函数以返回填充的元素数。或者,您可以在每个元素中初始化vacanciesnullptr,并在稍后循环时对其进行测试

int getVacancies(int ** vacancies, int grid[][ROW], int vCount)
{
    int i = 0;
    for (int row = 0; row < ROW; row++)
    {
        for (int col = 0; col < COL; col++)
        {
            if (grid[col][row] == 0)
            {
                if (i >= vCount) { // Prevent overflowing vacancies
                    return i;
                }
                vacancies[i++] = &grid[col][row];
            }
        }
    }
    return i;
}

答案 2 :(得分:0)

分配这样的二维数组(参见How do I declare a 2d array in C++ using new?):

    <tr ng-repeat="nota in pc.notas | orderBy: 'nombre'"  >
      <td>{{nota.nombre}}</td><td> {{nota.edad}}</td>
    </tr>