输入使用动态分配的字符串列表c
问题描述:
我想输入字符串列表。该列表可能会有所不同,所以我尝试使用动态分配。每个字符串最多20个字符。该列表以一个点结束。我一直在努力一段时间,但我一直在分段错误,我不知道为什么。我想这个错误是在我使用realloc/malloc,但我不明白我到底做错了什么。代码块是一个更大的程序的一部分,但我挑出这个块,并试图使其工作。它适用于一个单词后跟一个点的“列表”。只要我尝试阅读两个或更多字符串的列表,就会看到分段错误。 任何帮助将是伟大的,谢谢!输入使用动态分配的字符串列表c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **resizeDynamicArray(char **arr, int newSize){
char **ptr = realloc(arr, newSize*sizeof(char*));
if (ptr==NULL) {
printf("Error: memory allocation failed.\n");
exit(-1);
}
return ptr;
}
int input (char ***seq){
int len = 0;
char string[21];
*seq=NULL;
do{
scanf("%s", string);
if (string[0] != '.'){
*seq = resizeDynamicArray(*seq, (len+1));
*seq[len] = malloc(sizeof(char[21]));
strcpy((*seq)[len], string);
len++;
}
} while (string[0] != '.');
return len;
}
int main(int argc, char *argv[]) {
int length;
char **words;
length = input(&words);
for (int i=0; i<length; ++i){
printf("%s\n", words[i]);
}
for (int i=0; i<length; ++i){
free(words[i]);
}
free(words);
return 0;
}
答
更改以下行:
*seq[len] = malloc(sizeof(char[21]));
到:
(*seq)[len] = malloc(sizeof(char[21]));
有额外的间接水平,需要索引*阵列之前,你可以取消引用。
+0
非常感谢。那正是错误的地方。它现在很好用。 – Matt
一个三星级程序员应该能够调试自己的程序。 – EOF
查看['gdb'](http://www.gnu.org/software/gdb/documentation/) –
对所有EOF没有帮助。我远离“三星级程序员”。我是新来的编码和atm课程。谢谢帕特里克,我已经解决了。无论如何,我会看看它。 – Matt