Доброе утро
перед кодом, я не хочу, чтобы вы, ребята, дали мне код, чтобы я мог его использовать, так как я бы не узнал, почему это так происходит.Я хочу узнать, почему этот код не работает и как правильно использовать выделение памяти, чтобы я не потерпел неудачу снова в будущем.
Проблема, с которой я столкнулся, связана с функцией в моем коде, цель которой, учитывая двумерный динамический массив символов (Matrix) и другой динамический массив слов (List), найти все пути вМатрица, в которой находятся слова из списка, затем сохраняет эти пути в другом динамическом массиве (Paths).Моя проблема не в том, как найти эти пути, а в том, как их сохранить, так как все мои попытки найти решение встретились с ошибками перераспределения памяти.
это рассматриваемая функция:
notes:
этот код находит путь, сохраняет его в temp, а затем ДОЛЖЕН выделить память для копирования temp в path и затем повторить.Без выделенной части кода и нескольких printfs код показывает все пути правильно.Но показ и хранение - это две разные вещи
int ** path - the dyn array for the paths
int ** num_caminhos - the number of paths
char * palavra - the word to currently search for
int ID - the ID of the word, for later reference
void pesquisa(int ** path, int *num_caminhos, char **matriz, int num_colunas, int num_linhas, char * palavra, int l, int c, int li, int ci, int * temp, int d, int ID){
if (matriz[l][c]==palavra[d]){
if ((l-1)>=0 && palavra[d+1]==matriz[l-1][c]){
temp[5+d]=1;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l-1, c, li, ci, temp, d+1, ID);}
if ((l-1)>=0 && (c+1)<num_colunas && palavra[d+1]==matriz[l-1][c+1]){
temp[5+d]=2;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l-1, c+1, li, ci, temp, d+1, ID);}
if (((c+1)<num_colunas) && (palavra[d+1]==matriz[l][c+1])){
temp[5+d]=3;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l, c+1, li, ci, temp, d+1, ID);}
if ((l+1)<num_linhas && (c+1)<num_colunas && palavra[d+1]==matriz[l+1][c+1]){
temp[5+d]=4;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l+1, c+1, li, ci, temp, d+1, ID);}
if ((l+1)<num_linhas && palavra[d+1]==matriz[l+1][c]){
temp[5+d]=5;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l+1, c, li, ci, temp, d+1, ID);}
if ((l+1)<num_linhas && (c-1)>=0 && palavra[d+1]==matriz[l+1][c-1]){
temp[5+d]=6;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l+1, c-1, li, ci, temp, d+1, ID);}
if ((c-1)>=0 && palavra[d+1]==matriz[l][c-1]){
temp[5+d]=7;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l, c-1, li, ci, temp, d+1, ID);}
if ((l-1)>=0 && (c-1)>=0 && palavra[d+1]==matriz[l-1][c-1]){
temp[5+d]=8;
pesquisa(path, num_caminhos, matriz,num_colunas, num_linhas, palavra, l-1, c-1, li, ci, temp, d+1, ID);}
}
if ((d==strlen(palavra)-1) && (palavra[0]==matriz[li][ci])){
path=realloc(path, ((*num_caminhos)+1)*sizeof(int *));
path[*num_caminhos]=malloc((strlen(palavra)+5)*sizeof(int));
temp[0]=ID;
temp[1]=li;
temp[2]=ci;
temp[3]=l;
temp[4]=c;
for (int i=0; i<5+d; i++){
path[*num_caminhos][i]=temp[i];
}
*num_caminhos=*num_caminhos+1;
return;
}
}
извините, если код показывает слишком много "любительских" ошибок: P.Я склонен исправлять их, когда узнаю больше.Просто последняя деталь, к сожалению, я вынужден использовать выделение памяти dyn как часть цели этого кода.