C:数组初始化需要括号括起的初始化列表

时间:2015-12-28 10:55:23

标签: c arrays

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

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)

因为第二个选项不会一直有效。

如果能帮我一把,我会很高兴的。 :)

2 个答案:

答案 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