我有一个动态创建一个bisimentional数组的函数,该数组存储一系列单词,直到" gata"介绍。
问题是它崩溃了,我想行
*(*words+*dim-1) = (char*)calloc(MAX_DIM,sizeof(char));
可能是其中一个问题。这条线有什么问题?
void read_words(char ***words,int *dim)
{
char buff[100];
*words = (char**)calloc(*dim,*dim*sizeof(char*));
while(strcmp(buff,"gata"))
{
printf("the new word : ");
scanf("%100s", buff);
if(strcmp(buff,"gata"))
{
dim++;
*words = (char**)realloc(words,*dim*sizeof(char*));
if(words == NULL)
{
printf("Memory allocation failed !\n");
exit(0);
}
*(*words+*dim-1) = (char*)calloc(MAX_DIM,sizeof(char));
strcpy(*(*words+*dim-1),buff);
}
}
}
int main()
{
char **words;
int i,dim = 0;
read_words(&words,&dim);
for (i = 0; i < dim; i++)
free(&words[i]);
free(words);
return 0;
}
答案 0 :(得分:1)
主要问题在于
while(strcmp(buff,"gata"))
其中buff
是一个自动局部变量并且未初始化。使用内容调用undefined behavior。在使用之前,您需要初始化buff
。
那就是说,
scanf("%100s", buff);
开启了off-by-one的可能性,即scanf("%99s", buff);
。{/ li>
dim++;
递增指针本身,而不是指针指向的值。