Моя проблема предельно проста: я хочу выделить память для двумерного массива в c, заполнить его -1, затем освободить и выйти из программы.Мой код продолжает падать, и я не знаю, что я делаю неправильно ... Вот что я получил:
int main(){
int i,j;
char str1[]="xxxabxcxxxaabbcc";
char str2[]="abc";
int len1=strlen(str1);
int len2=strlen(str2);
printf("%d %d",len1,len2);
//allocate 2d_array
int **H_table = (int**)malloc((len1+1)*sizeof(int));
for (i=0; i<len1+1; i++){
H_table[i] = (int*)malloc((len2+1)*sizeof(int));
}
//fill and print 2d array
for(i=0;i<len1+1;i++){
for(j=0;j<len2+1;j++){
printf("i:%d j:%d",i,j);
H_table[i][j]=-1;
printf(" value:%d\n",H_table[i][j]);
}
}
// free 2d array
for(i=0;i<len1;i++){
free(H_table[i]);
}
free(H_table);
return 0;
}
Итак, что я хочу выделить массив, который имеет 1 дополнительную строку и 1 дополнительный столбецчем две строки, если вы поместите их вертикально по сравнению друг с другом.
И это то, что я ожидал (вещи в скобках, очевидно, не являются частью таблицы, я положил их для сравнения):
(x x x a b x c x x x a a b b c c)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
a)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
b)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
c)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Проблема в том, что код падает при заполнении таблицы и всегда падает при i = 9 и j = 3 для этих конкретных строк.Странная часть в том, что если вы поменяете местами 2 строки (поместите «abc» в str1), то код пройдет этап заполнения и завершится с ошибкой при попытке освободить массив.
Извините за любые грамматические ошибки или переполнение стекаошибки, я вроде как новенький: P
Любая идея приветствуется :) спасибо заранее