我只是一个初学者,并且遇到了指针数组问题。
你能告诉我错误在哪里吗?

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/

10-12 01:22
查看更多