c - 为静态数组的动态数组分配内存

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

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

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/

相关文章:

python - 根据另一个数组中的 ID 值高效处理一个数组中的值

c++ - 从数组指针中添加和减去一个元素

c++ - 使用指针问题调用类函数

c - malloc 未使用指向指针的指针正确分配

c - 函数指针的大小有什么保证?

python - ctypes 和结构数组

编译错误 'incompatible pointer to integer conversion passing ' int (int, int )' to parameter of type ' int' [-Wint-conversion]"

c - 将 char* 分配给 char

内置 "in"算子的Python源码

javascript - Lodash.js 相当于搜索符合条件的对象