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