我正在尝试运行二维数组并使用指向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++;
}
}
}
}
答案 0 :(得分:1)
您只分配了&#34;一个维度&#34;。这些int*
元素应指向int
或int
的数组。取消引用这些未初始化的指针是未定义的行为。
答案 1 :(得分:1)
我认为这是你需要初始化数组的方法。你不应该遍历vacancies
,因为这会用每个元素填充一个指向同一元素grid
(最后一个空元素)的指针。相反,您只想循环遍历grid
,并将每个空白元素添加到vacancies
中的下一个条目。
我还更改了函数以返回填充的元素数。或者,您可以在每个元素中初始化vacancies
到nullptr
,并在稍后循环时对其进行测试
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>