我只是一个初学者,并且遇到了指针数组的问题。 你能告诉我错误在哪里吗?
int ini()
{
int *tab[N];
int i, j, a, b;
for (i = 0; i < N; i++)
{
tab[i] = (int*)malloc(M*sizeof(int));
}
if (tab == NULL)
return -1;
scanf_s("%d %d", &a, &b);
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
*(*(tab+i)+j) = rand() % (b - a + 1) + a;
}
}
return tab;
}
int main()
{
int i, j, *tablica[N] = ini();
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d ", *(*(tablica+i) + j));
}
printf("\n");
}
system("PAUSE");
return 0;
}
任务itsef很简单,我可以用其他方式完成,但我只是想用它:
*(*(tab+i)+j)
而不是:
*(tab + N*i + j)
因为第二个选项不会一直有效。
如果能帮我一把,我会很高兴的。 :)答案 0 :(得分:1)
一些显而易见的事情:
你在其范围之外返回一个本地声明的数组(int *tab[N];
),因此它会变成垃圾。这一定是您最明显的问题。
你在ini()
方法中对该数组的元素进行malloc但从不释放它们,因此你会遇到内存泄漏。
检查选项卡的NULL没有多大意义,因为tab永远不会为NULL;另一方面,tab [i]可以为NULL,并且可以在malloc之后检查它。
您没有检查您的tablica不是-1。
答案 1 :(得分:0)
我想升级该程序(并使其以相同的方式工作):
ms-help://embarcadero.rs_xe7/rad/IDE_Command_Line_Switches_and_Options.html