我已经阅读了很多关于此的帖子,但似乎我的问题更具体一些。我想我会设法分配一个动态二维数组。
由于现有代码,我必须使用静态数组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));
}
这是我错误最少的版本。只剩下一个了
error C2106: '=' left operand must be l-value
我知道这个话题很乏味,而且经常出现。不过,我对 typedef
感到很困惑,它已经是一个静态数组。所以我想,这里不需要 **
指针。
感谢任何帮助。
最佳答案
如果 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
)。
关于c - 为静态数组的动态数组分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12823033/