在 c 中重新分配 char** 数组(Seg fault core dumped)
Reallocating char** array in c (Seg fault core dumped)
我正在为每个条目重新分配一个 char**
数组,当编译返回干净时,只有第一个条目被存储,当我尝试注册第 4 个条目时,我总是得到分段错误(核心转储)。
这里是main.c中的相关代码:
int main(int argc, char *argv[])
{
int i,sizea,sizeb,choice,letters,check,mistakes,count;
char C[26][2];
char **A,**B,a;
A=(char**)malloc(sizeof(char*));
*A=(char*)malloc((MAX_CHAR+1)*sizeof(char));
sizea=1;
build(&A,&sizea);
return 0;
}
下面是mylib.c中方法的实现:
void build(char ***A, int *sizea)
{
*A=(char**)realloc(*A,(*sizea) * sizeof(char*));
*A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));
printf("Give word :");
scanf("%s",(*A[*sizea-1]));
(*sizea)++;
}
非常感谢您的帮助。
编辑:此方法中的类似问题未通过执行相同的操作得到解决
void find(char **A, char ***B, int letters,int sizea, int *sizeb){
int i,j,k,dummy;
char a='a';
for(i=0;i<(sizea-1);i++){
printf("here\n");
if(A[i][letters]=='[=12=]'){
*B=(char**)realloc(*B,(*sizeb+1) * sizeof(char*));
(*B)[*sizeb]=(char*)malloc((letters+1)*sizeof(char));
(*B)[*sizeb-1]=A[i];
*sizeb++;
printf("%s\n", (*B)[i]);
}
}
}
问题出在这里:
scanf("%s",(*A[*sizea-1]));
数组索引运算符 []
的优先级高于解引用运算符 *
。所以上面的解析为:
scanf("%s",(*(A[*sizea-1])));
你想要的是:
scanf("%s",((*A)[*sizea-1]));
同样,这个:
*A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));
应该是:
(*A)[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));
我正在为每个条目重新分配一个 char**
数组,当编译返回干净时,只有第一个条目被存储,当我尝试注册第 4 个条目时,我总是得到分段错误(核心转储)。
这里是main.c中的相关代码:
int main(int argc, char *argv[])
{
int i,sizea,sizeb,choice,letters,check,mistakes,count;
char C[26][2];
char **A,**B,a;
A=(char**)malloc(sizeof(char*));
*A=(char*)malloc((MAX_CHAR+1)*sizeof(char));
sizea=1;
build(&A,&sizea);
return 0;
}
下面是mylib.c中方法的实现:
void build(char ***A, int *sizea)
{
*A=(char**)realloc(*A,(*sizea) * sizeof(char*));
*A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));
printf("Give word :");
scanf("%s",(*A[*sizea-1]));
(*sizea)++;
}
非常感谢您的帮助。
编辑:此方法中的类似问题未通过执行相同的操作得到解决
void find(char **A, char ***B, int letters,int sizea, int *sizeb){
int i,j,k,dummy;
char a='a';
for(i=0;i<(sizea-1);i++){
printf("here\n");
if(A[i][letters]=='[=12=]'){
*B=(char**)realloc(*B,(*sizeb+1) * sizeof(char*));
(*B)[*sizeb]=(char*)malloc((letters+1)*sizeof(char));
(*B)[*sizeb-1]=A[i];
*sizeb++;
printf("%s\n", (*B)[i]);
}
}
}
问题出在这里:
scanf("%s",(*A[*sizea-1]));
数组索引运算符 []
的优先级高于解引用运算符 *
。所以上面的解析为:
scanf("%s",(*(A[*sizea-1])));
你想要的是:
scanf("%s",((*A)[*sizea-1]));
同样,这个:
*A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));
应该是:
(*A)[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));