c - free() 一个字符数组**

标签 c arrays pointers free

我有这个:

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/

相关文章:

c++ - 在资源中连接定义和字符串

c - 为什么以及在何种意义上 pthread_t 是不透明类型?

c - C中计数排序的奇怪输出

javascript - 如何在 JavaScript 中访问数组中的数据

c++ - 获取数组中所有数字组合且无间隙的最快方法

c - 将结构传递给接受 void * 参数的函数的问题

c - C编程中使用循环和scanf的字符串数组

java 。序列化数组

c++ - 释放指针 vector ,但内存仍在使用中

c 如何在修改后的树中保留数据