【发布时间】:2015-08-13 19:56:10
【问题描述】:
我的动态二维数组有问题。
与malloc 一起工作。使用realloc,它失败了。
这不起作用:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *const *argv) {
unsigned ** gmatrix = NULL;
int cap = 4;
/*
...
*/
gmatrix = realloc(gmatrix, 4 * sizeof(unsigned*));
for(unsigned i = 0; i < cap; i++) {
gmatrix[i] = realloc(gmatrix, cap* sizeof(unsigned));
}
// initialize:
for(unsigned i = 0; i < cap; i++) {
for(unsigned j = 0; j < cap; j++) {
gmatrix[i][j] = 0;
}
}
}
但这确实:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *const *argv) {
unsigned ** gmatrix = NULL;
int cap = 4;
/*
...
*/
gmatrix = malloc(cap * sizeof(unsigned*));
for(unsigned i = 0; i < cap; i++) {
gmatrix[i] = malloc(cap* sizeof(unsigned));
}
for(unsigned i = 0; i < cap; i++) {
for(unsigned j = 0; j < cap; j++) {
gmatrix[i][j] = 0;
}
}
}
在第一个代码部分中,我收到了分段错误错误。为什么?
【问题讨论】:
-
对我来说很好用!您确定这是生成段错误的代码吗?顺便说一句,您忘记释放两个程序中分配的内存。
-
哦,行中有错误:gmatrix[i] = malloc(cap* sizeof(unsigned));它应该是 gmatrix[i] = realloc(gmatrix, cap* sizeof(unsigned));
-
现在更正了。
-
calloc对于gmatrix[i]会更好,以避免将条目归零。
标签: c multidimensional-array segmentation-fault malloc realloc