我只是一个初学者,并且遇到了指针数组问题。
你能告诉我错误在哪里吗?
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;
}
它的任务很简单,我可以用另一种方式来做,但是我只是想使用它:
*(*(tab+i)+j)
而不是:
*(tab + N*i + j)
因为第二个选项可能并不总是有效。
如果您能帮帮我,我会很高兴。 :)
最佳答案
一些明显的事情:
您在其作用域之外返回了一个本地声明的数组(int *tab[N];
),因此该数组在那里将是垃圾。这一定是您最明显的问题。
您在ini()
方法中分配了该数组的元素,但从不释放它们,因此会发生内存泄漏。
检查tab是否为NULL并没有多大意义,因为tab永远不会为NULL。另一方面,tab [i]可以为NULL,并且可以在malloc之后进行检查。
您不必检查您的Tablica是否为-1。
关于c - C:数组初始化需要用大括号括起来的初始化器列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34492198/