C程序双重免费或损坏错误

时间:2014-10-21 23:15:31

标签: c

目前正在研究C中的一致性程序。当我尝试运行该程序时,我收到一个错误。

这是我的C程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


void print(char Table, int n) {
    printf("%d: ", n+1); // Prints the table
}

int insert(const void *bb, const void *cc) {
    return strcmp(*(const char **)bb, *(const char **)cc);
}

void empty(char *Table[]) {
    strcat(Table,"NULL"); // Empties the table
}

int main(int argc, char *argv[]){


    if(argc!=3){
        printf("ERROR: Usage: concordance table_size"); // Errors due to not enough variables (Should be tablesize and file name)
    } else {

        FILE *fp;  //This block opens the file user has inputted and makes the string "File_contents" set to the file's contecnts
        fp = fopen(argv[2],"r");
        char *file_contents;
        long input_file_size;
        fseek(fp, 0, SEEK_END);
        input_file_size = ftell(fp);
        rewind(fp);
        file_contents = malloc((input_file_size + 1) * (sizeof(char)));
        fread(file_contents, sizeof(char), input_file_size, fp);
        fclose(fp);
        file_contents[input_file_size] = 0;

        char *word, *words[strlen(file_contents)/2+1];
        int i, n;

        for(i=0;file_contents[i];i++){
            file_contents[i]=tolower(file_contents[i]); //Converts all words to lower case
        }

        i=0;
        word = strtok(file_contents, " ,.-:;?!"); //Chars which signal end of word

        while(word != NULL) {
            words[i++] = word;
            word = strtok(NULL, " ,.-:;?!");
        }

        n = i;

        qsort(words, n, sizeof(*words), insert);

        for(i=0; i<n; ++i){
            print(words[i],i);
            printf("%s\n", words[i]);
        }
        empty(words);
        fclose(fp); // Closes open file
    }
    return 0;
}

以下是我得到的错误:

*检测到glibc * 一致性:双重免费或损坏(!prev):0x0000000001060f010

不确定是什么原因导致此错误发生。对此的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

您没有两次致电fclose()。我反过来可能会在内部调用free()。删除程序末尾的fclose()

答案 1 :(得分:-2)

您将NULL作为参数传递给strtok函数。我认为这可能会导致问题