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



我有一个函数,如

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语句复制到第一个函数中,它就能正常工作。所以问题是,一旦它离开那个函数,它就没有被正确地发送给全局变量。如何修改

这个函数期望一个vla数组,但是你的currentCompressedLetter指向一个指针数组。

我假设您希望使用print来打印currentCompressedLetter。然而,这是不可能的,因为VLA不是指针(也不是固定长度的数组)。如果您尝试这样做,您将得到一条编译器消息。你不应该忽略编译器消息,即使它们看起来是"only"警告。

最简单的修复方法是将print更改为:

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

并保持其内容不变。如果您还想打印vla,那么可以使用两个单独的函数。

相关内容

  • 没有找到相关文章

最新更新