我有这个:
struct Library {
char letter;
int capacity;
int size;
char** words;
};
typedef struct Library Lib;
初始化库数组:
void InitLibrary(Program* startup) {
char alphabet[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
startup->dictionary = malloc(sizeof(Lib) * 26);
int i;
for (i = 0; i < 26; i++) {
startup->dictionary[i].letter = alphabet[i];
startup->dictionary[i].capacity = INIT_CAPACITY;
startup->dictionary[i].size = 0;
startup->dictionary[i].words = malloc(sizeof(char*) * startup->dictionary[i].capacity);
}
}
我在这里填充数组 words
:
void FillDicoFromFile(Program* startup){
while((!feof(startup->f) && !ferror(startup->f))){
char* word = malloc(sizeof(char) * 30);
fscanf(startup->f, "%s", word);
ToLowerCase(word);
int indexLib = word[0] - 97;
int sizeLib = startup->dictionary[indexLib].size;
startup->dictionary[indexLib].words[sizeLib] = word;
startup->dictionary[indexLib].size++;
}
CountTotalWords(startup);
rewind(startup->f);
}
和这样的函数:
void CleanDico(Program* startup){
int i = 0;
for(; i < startup->dictionary[i].size; i++){
int j = 0;
for(; j < startup->dictionary[i].size; i++){
free(startup->dictionary[i].words[j]);
startup->dictionary[i].words[j] = NULL;
}
startup->dictionary[i].size = 0;
}
startup->totalWords = 0;
}
我在我的结构上获取了数组的大小以获得数组的限制,并释放了所有使用的单元格,但每次我调用 CleanDico
时,代码都会崩溃。有什么建议么?
我已经问过了a question on a problem with a char array .现在我想free()
数组。我在这里和那里阅读了大量帖子并测试了很多解决方案,但没有一个能帮助我解决问题。
我在 CleanDico
上遇到了 SEGMENTATION_FAULT,而且我没有关于该错误的任何其他信息。 Code::Blocks 上的 Debug模式错误消息很差。
最佳答案
我想你的第二个是你打算做的
for(; j < startup->dictionary[j].size; j++){
代替
for(; i < startup->dictionary[i].size; i++){
关于c - free() 一个字符数组**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40656119/