我想像这样创建一个二维数组:
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/