2012-10-10 50 views
1

我已经阅读了大量关于此的帖子,但看起来,我的问题更具体。我想我会设法分配一个动态二维数组。为静态数组的动态数组分配内存

由于现有的代码,我必须使用一个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感到困惑,它已经是一个静态数组了。所以我想,在这里不需要**指针。

感谢任何帮助。

+0

注意:你正在分配'BufferArray [iCount]'而不是'BufferArray [i]',这很可能不是你想要的。 – Shahbaz

+0

注意:以上不能为真码,不会编译。我不相信'iCount * sizeof Buffer *'。 – unwind

+0

对,如果是[i]。 @unwind:我知道,它不会编译,正如我写的。 –

回答

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数量的静态unsigned char型阵列(Buffer)。

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