C动态分配的数组未正确传递

时间:2014-05-28 03:11:32

标签: c arrays initialization malloc 2d

我有一个功能,如

currentCompressedLetter = malloc(extractHeight * sizeof(int*));
for (i = 0; i < extractHeight; i++)
  currentCompressedLetter[i] = malloc(extractWidth * sizeof(int));  

它将值设置为全局数组int **currentCompressedLetter

当我尝试使用单独的函数将输出打印到屏幕时,我将currentCompressedLetter作为参数传递,它输出错误。

void print(int height, int width, int sq[height][width])
{
  int i = 0, j = 0;
  while(i < height)
  {
    while(j< width)
    {
     if (sq[i][j] == 1)
        printf(".");
     else if (sq[i][j] == 2)
        printf("=");
     else printf("'");
     j++;
    }
    printf("\n");
    i++;
    j = 0;
   }
}

但是如果我将print语句复制到我的第一个函数中,它就能正常工作。所以问题在于它一旦离开该函数就没有被正确发送或者变成全局变量。我该如何修改

1 个答案:

答案 0 :(得分:1)

此函数需要一组VLA,但是您的currentCompressedLetter指向一个指针数组。

我假设您希望使用print来打印currentCompressedLetter。但是,这是不可能的,因为VLA不是指针(也不是固定长度的数组)。如果你试过这个,你会得到一个编译器消息。您不应该忽略编译器消息,即使它们看起来只是&#34;只有&#34;警告。

最简单的解决方法是将print更改为:

void print(int height, int width, int **sq)

并保留相同的内容。如果您还想打印VLA,则有两个独立的功能。