c - 通用二维数组

标签 c

我想像这样创建一个二维数组:

void **mdeclaraMatrice(int nrLini,int nrColoane, int sizeOfElement)
{
    int i;
    void **m = malloc(nrLini * 4);
    if(m==NULL)
        return NULL;
    for(i=0; i<nrLini; i++)
    {
        *(m + (i*4)) = malloc(nrColoane * sizeOfElement);
        if(*(m + (i*4)) == NULL)
             return NULL;
    }
    return m;
}

我想像这样使用它:

int **m = (int **)mdeclaraMatrice(n,m,sizeof(int));

但它不起作用。我做错了什么?

最佳答案

您应该使用 m[i] 而不是 *(m+i*4) 并让编译器进行算术运算。

此外,您应该在发生故障时释放已经分配的内存。

试试这个:

void **mdeclaraMatrice(int nrLini, int nrColoane, int sizeOfElement)
{
    int i;
    void **m = malloc(nrLini * sizeof(void*));
    if (m == NULL)
        return NULL;
    for (i=0; i<nrLini; i++)
    {
        m[i] = malloc(nrColoane * sizeOfElement);
        if (m[i] == NULL)
        {
             while (i-- > 0)
                 free(m[i]);
             free(m);
             return NULL;
        }
    }
    return m;
}

关于c - 通用二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27214119/

相关文章:

c - 为 ARM 发布交叉编译 apr-1.5.2

c - 在循环中使用 strlen 反转 C 中的字符串

从守护进程插件中调用 mysql_real_connect

c - 是什么导致我的代码不确定?

c - 最后带有额外参数的宏?

在 c 中的 main() 中调用 main()

c - 为什么在一个函数中声明的 union 类型在另一个函数中使用是无效的?

C - 将数字列表与数组进行比较

c - 数组元素之前的取消引用运算符?

c - 我的文件中出现了奇怪的字符。我在C语言中使用无缓冲I/O流