【问题标题】:Allocate memory for a dynamic array of static arrays为静态数组的动态数组分配内存
【发布时间】:2012-10-10 15:29:42
【问题描述】:

我已经阅读了很多关于此的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态二维数组。

由于现有代码,我必须使用 typedef 这是一个静态数组。现在我想暂时存储未知数量的这些数组。我用指针尝试了几种变体,但我什至无法编译它。

以下代码应该解释我想要做什么:

int                     iCount, i;
typedef unsigned char   Buffer[1024];

Buffer       *          BufferArray=NULL;

BufferArray = malloc(iCount * sizeof Buffer*);

for(i=0;i<iCount;i++)
{
    BufferArray[i] = malloc(sizeof(Buffer));
}

这是我的错误最少的版本。只剩下一个了

错误 C2106:“=”左操作数必须是左值

我知道这个话题很乏味,而且经常出现。不过,我对typedef 感到很困惑,它已经是一个静态数组。所以我想,这里不需要** 指针。

感谢任何帮助。

【问题讨论】:

  • 旁注:您分配给BufferArray[iCount] 而不是BufferArray[i],这很可能不是您想要的。
  • 旁注:以上不能是真实代码,不会编译。我不相信iCount * sizeof Buffer*
  • 对,应该是 [i]。 @unwind:我知道,正如我写的那样,它不会编译。

标签: c arrays pointers malloc typedef


【解决方案1】:

如果 typedef 让您感到困惑,请删除它(在您的脑海中):

typedef unsigned char   Buffer[1024];  

所以当我们看到Buffer 时,将其视为 [1024] 的无符号字符数组。

Buffer * BufferArray=NULL; // really it's: unsigned char[] * 

现在您希望保留未知数量的这些数组。好吧,您并没有真正使用 2D 动态数组,只是一个恰好包含静态数组的动态数组:

typedef unsigned char Buffer[1024];

int main(void) {
    Buffer * BA = NULL;
    int iCount = 5;
    BA = malloc(iCount * sizeof(Buffer));
    BA[0][0] = 10;
    return 0; 
} 

现在BA 是一个动态创建的数组,您可以使用它来临时保存iCount 数量的静态无符号字符数组 (Buffer)。

【讨论】:

    【解决方案2】:

    如果要将动态数组的元素从动态数组复制到静态数组。下面有一个简单的解决方案。

    #include<stdio.h>
    #include<malloc.h>
    #define r 2
    #define c 5
    
    int main()
    {
        char *p;
        char a[r][c];
        int i,j;
    
        p=(char*)malloc(r*c*sizeof(char));
        gets(p);
        puts(p);
    
        while(*p!='\0')
        {
            for(i=0;i<=r-1;i++)
            {
                for(j=0; j<=c-1; j++)
                {
                    a[i][j] =* p;
                    ("%c",a[i][j]);
                    p++;
                }
            }
        }
        printf("\n");
        return (0);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2013-12-27
      • 2020-09-18
      • 2010-11-27
      相关资源
      最近更新 更多