你好我有这个函数,它有3个动态矩阵,我需要返回每一个,但我不能使用结构,所以我试图在参数上使用三指针,所以我可以存储地址并在其他函数上使用它,问题是当我这样做时程序崩溃..
该函数获取一个数组,该数组在每个指针上包含一个文本(数组)的短语和数量(n_frases),这里的目标是拥有一个没有所有阶段的重复单词的数组(todasPalavras),一个数组重复的单词(palavras_com_repeticao)和单词在文本上的位置(palavra_com_posi)。
就像我之前说过的,我想要返回palavra_com_posi,但它会崩溃,帮助。产品:>
char **separar_palavras(char **array, int n_frases, int *numero_de_palavras,int *** array_posicao, char** palavras_com_repeticao)
{
printf("%d----------\n",n_frases);
char *palavra=NULL;
int numero_de_palavra = 0,numero_da_palavra_frases=0,numero_da_palavra_frases_total=0,npalavrasmax=10,i,c;
char **todasPalavras=(char**)malloc(sizeof(char *)*10);
palavras_com_repeticao=(char**)malloc(sizeof(char*)*10);
int ** palavra_com_posi=(int**)malloc(sizeof(int *)*10);
for(i=0; i<n_frases; i++)
{
palavra = strtok (array[i]," ,.!?\n");
numero_da_palavra_frases=0;
while(palavra!=NULL)
{
int flag=1;
//palavra=caracteres_especiais(palavra,strlen(palavra));
palavras_com_repeticao[numero_da_palavra_frases_total]=(char*)malloc(1*(strlen(palavra)+2));
strcpy(palavras_com_repeticao[numero_da_palavra_frases_total],palavra);
palavras_com_repeticao[numero_da_palavra_frases_total][strlen(palavra)]='\0';
// printf("%s\n",palavras_com_repeticao[numero_da_palavra_frases_total]);
palavra_com_posi[numero_da_palavra_frases_total] = malloc(4 * sizeof(int));
palavra_com_posi[numero_da_palavra_frases_total][0] = i+1;
palavra_com_posi[numero_da_palavra_frases_total][1]=numero_da_palavra_frases+1;
palavra_com_posi[numero_da_palavra_frases_total][2]=numero_da_palavra_frases_total+1;
palavra_com_posi[numero_da_palavra_frases_total][3]=0;
numero_da_palavra_frases++;
numero_da_palavra_frases_total++;
if(numero_da_palavra_frases_total%10==0 && numero_da_palavra_frases_total!=0)
{
palavra_com_posi = realloc(palavra_com_posi,((numero_da_palavra_frases_total+10)*sizeof(int*)));
palavras_com_repeticao = realloc(palavras_com_repeticao,((numero_da_palavra_frases_total+10)*sizeof(char*)));
int o=0;
for(o=numero_da_palavra_frases_total;o<numero_da_palavra_frases_total+10;o++)
{
palavra_com_posi[o]=NULL;
palavras_com_repeticao[o]=NULL;
}
// *(todasPalavras+numero_de_palavra)=(char**)malloc(sizeof(char *)*10);//-----A dar mal-----
}
for(c=0; c<numero_de_palavra; c++)
{
if(strcmp(palavra,todasPalavras[c])==0)
{
flag=0;
break;
}
}
if(flag==1)
{
todasPalavras[numero_de_palavra]=(char*)malloc(sizeof(char)*(strlen(palavra)+1));
strcpy(todasPalavras[numero_de_palavra],palavra);
todasPalavras[numero_de_palavra][strlen(palavra)] = '\0';
//printf("%d\n",strlen(palavra));
numero_de_palavra++;
if(numero_de_palavra==npalavrasmax)
{
npalavrasmax += 10;
todasPalavras = realloc(todasPalavras,(npalavrasmax*sizeof(char*)));
int h=0;
for(h=numero_de_palavra;h<npalavrasmax;h++)
{
todasPalavras[h]=NULL;
}
// *(todasPalavras+numero_de_palavra)=(char**)malloc(sizeof(char *)*10);//-----A dar mal-----
}
}
palavra = strtok(NULL, " ,.!?\n");
}
}
*numero_de_palavras=numero_de_palavra;
//search_word(palavra_com_posi,numero_da_palavra_frases_total,palavras_com_repeticao);
//frase_entre_palavras(palavra_com_posi,numero_da_palavra_frases_total,palavras_com_repeticao); //-bug
//frase_entre_palavras_escolhidas(palavra_com_posi,numero_da_palavra_frases_total,palavras_com_repeticao); //-bug
//search_letras(palavras_com_repeticao, numero_da_palavra_frases_total);
//primeira_ultima_letra(palavras_com_repeticao,numero_da_palavra_frases_total);
//palavra_media(palavras_com_repeticao,numero_da_palavra_frases_total);
//maior_tamanho(palavras_com_repeticao,numero_da_palavra_frases_total);
//procurar_raizes(palavras_com_repeticao,numero_da_palavra_frases_total);
*array_posicao=palavra_com_posi; //----->Crashes here
return todasPalavras;
}
void example()
{
// printf("\n\n %c %c",'a',tolower('A'));
int i = 0, j = 0, n = 4, numero_frases=0, pi=0;
char *texto = NULL;
int numero_de_palavras= 0;
char *path = "data\\message_1.txt";
char **array_frases=NULL;
char **bag_of_words=NULL;
char **todas_palavras=NULL;
int ***array_posicao_palavras=NULL;
texto= read_message(path);
// printf("%s",texto);
array_frases=create_array_strings(texto,&numero_frases);
bag_of_words=separar_palavras(array_frases,numero_frases,&numero_de_palavras,array_posicao_palavras,todas_palavras);