【发布时间】:2021-10-07 08:14:37
【问题描述】:
我正在使用 C 语言编写 minisql 代码,但在分配字符串数组时遇到了一些问题。我创建了一个名为“alocaString”的函数来执行此操作(bc 我经常使用它),但我认为它不起作用。 当代码到达“strncpy(lista[qtnPalavras], splitStr, 100);”行时在函数“listaPalavras”(用于将字符串拆分为不同类型的字符)中,创建了一个名为“strcpy-avx2.S”的文件,该函数的一个参数(**lista)分配有“ alocaString" 所以我认为问题出在那个函数上。
我已经尝试使用 valgrind 并向我尝试在该函数上使用的所有字符串数组显示“在此函数中未初始化 [-Werror=uninitialized]”,但我在函数内部初始化它们
int alocaString (char **string, int tamanho, int posicoes){
string = malloc (posicoes * sizeof(char*));
for (int i = 0; i < posicoes; i++){
string [i] = malloc (tamanho * sizeof(char));
if (string[i] == NULL){return 0;}
}
return **string;
}
void desalocaString (char **string, int posicoes){
for (int i = 0; i < (posicoes); i++){
free (string[i]);
}
free (string);
}
int listaPalavras(char *entrada, char **lista, char *separador){ // lista as palavras
char *splitStr;
int qtnPalavras = 0;
splitStr = strtok(entrada, separador);
while (splitStr != NULL){
strncpy(lista[qtnPalavras], splitStr, 100);
qtnPalavras++;
splitStr = strtok(NULL, separador);
}
return qtnPalavras;
}
【问题讨论】:
-
并且由于您要覆盖参数
char **string,因此最好作为局部变量而不是参数。 -
@user3121023 我更改为 char **alocaString,现在我遇到了另一个问题。当我运行代码时,它在释放内存时显示“free():无效指针”