为动态静态数组阵列分配内存

时间:2012-10-10 15:29:42

标签: c arrays pointers malloc typedef

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

由于现有代码,我必须使用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:'='左操作数必须是l值

我知道这个话题很乏味,经常发生。虽然,我对typedef非常困惑,**已经是一个静态数组。所以我想,这里不需要{{1}}指针。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果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)。

答案 1 :(得分:0)

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

#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);
}