Итак, я сделал 2 функции, чтобы добавить элементы в 2d массив и затем освободить его.Массив nx 2. Я использую realloc для выделения дополнительного пространства каждый раз, когда n = n + 1.Это мой код:
void add_cell(int** table, int value1,int value2,int elements_count){
table=(int**)realloc(table, sizeof(*table) * (elements_count+1)); //<--I think this may be problematic
table[elements_count]=(int*)malloc(2*sizeof(table[elements_count]));
table[elements_count][0]=value1;
table[elements_count][1]=value2;
}
void reset_table(int** table,int elements_count){
int i;
for(i=0;i<elements_count;i++){
free(table[i]);
}
printf("reset done");
}
, когда я добавляю дополнительные ячейки, я добавляю только 1 дополнительную строку каждый раз.таким образом, массив 2x2 становится 3x2, а 3x2 становится 4x2, поэтому, если я звоню так:
add_cell(coord_table,5,4,3);
before after
1 2 1 2
2 3 -> 2 3
3 4 3 4
4 5
Это то, как я вызываю функции (этот код имеет какую-то цель, его просто длятестирование функций):
int main(){
int **coord_table;
int i;
for(i=0;i<5;i++){
add_cell(coord_table,i+1,i+2,i);// should allocate 1extra row each time so
//when i=0 you should have [1 2]
//when i=2 [1 2][2 3]
//when i=3 [1 2][2 3][3 4] and so on...
}
reset_table(coord_table,5);
for(i=0;i<5;i++){
add_cell(coord_table,i+1,i+2,i);
}
reset_table(coord_table,5);
free(coord_table);
return 0;
}
Я новичок в использовании 2d-массивов с malloc и realloc, я даже не знаю, насколько это хороший способ сделать то, что я хочу, но это то, что я придумал,Но он продолжает падать, когда пытается вызвать reset_table.Я полагаю, что неправильно распределяю таблицу с помощью realloc, даже если происходит сбой при попытке освобождения, а не при выделении.
Любая идея полезна, заранее спасибо :)