我试图用C语言实现维特比译码器。
所以我想用一个二维数组来动态创建。以下是动态创建的2D数组的示例代码:
place_table = (int **)malloc((no_places+1)*sizeof(int *));
for(i = 1; i <= no_places; i++)
place_table[i] = (int *)malloc((no_places+1)*sizeof(int));这个二维数组的大小在我的解码器中不断变化,也就是说,no_places一直在变化,所以我想知道如何重新分配这个二维数组的内存。
任何建议或帮助都将不胜感激。
发布于 2014-02-18 18:12:37
您可以为二维数组(C99)动态分配内存:
int no_places;
int n = no_places + 1; // for brevity in the following statement
int (*place_table)[n] = malloc(sizeof(int[n][n]));
// check for NULL
if(place_table == NULL) {
// there's a problem
// handle it
}
else {
// you are good to go
}为二维数组place_table重新分配内存是不正确的,因为随着维度的变化,旧数组中的值将被重新解释,就好像它们是新数组的元素一样。这将导致行被环绕。(由皮特·柯克姆提供)。因此,您需要分配一个新数组并将值从旧数组复制到它,然后释放旧数组。
int old_n = n;
// value of n has been changed
// allocate a new array
int (*new_place_table)[n] = malloc(sizeof(int[n][n]));
// check for NULL and accordingly proceed
// if not NULL, copy place_table to new_place_table
for(int i = 0; i < old_n; i++) {
for(int j = 0; j < old_n; j++) {
new_place_table[i][j] = place_table[i][j];
}
}
free(place_table);
// do stuff with new_place_table
free(new_place_table); 还请注意,您不需要转换malloc的结果。这样做没有好处,如果忘记包含stdlib.h头文件,可能会导致错误、未定义的行为和程序崩溃。阅读详细信息here。
https://stackoverflow.com/questions/21861072
复制相似问题