gpt4 book ai didi

c - 大量输入文件导致程序根本无法运行

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:58 24 4
gpt4 key购买 nike

我正在开发一个词频程序,旨在处理任意数量的输入文件。它适用于较少数量的文件,即使这些文件有数万个单词,但当尝试使用大量文件(在我正在测试的情况下为 24 个)运行它时,它甚至几乎没有开始读取段错误之前的第一个文件。

typedef struct {
int noInFiles, numFiles, numToPrint;
char** fileNames;
FILE** files;
Hash hash;
} Freq;

void openFiles(Freq* freq) {
int i;
char* str;

freq->files = calloc(1,sizeof(FILE**));

for(i = 0; i < freq-> numFiles; i++) {
freq->files[i] = fopen(freq->fileNames[i],"r");
if(freq->files[i] == NULL) {
str = malloc(strlen(freq->fileNames[i]) + 5);
sprintf(str,"wf: %s",freq->fileNames[i]);
perror(str);
free(str);
exit(EXIT_FAILURE);
}
}
}

void wordCount(Freq* freq) {
int i, totalWords = 0;
char *word = NULL;
unsigned wordLength = 0, memSize = 0;

for(i = 0; i < freq->numFiles; i++) {
fprintf(stderr,"Counting from file %d named %s\n", i,freq->fileNames[i]);
while(EOF != getWord(&word, &wordLength, &memSize, freq->files[i], "file"))
{
addEntry(&(freq->hash), word, 1);
totalWords++;
free(word);
word = NULL;
}

}
freq->totalWords = totalWords;
}

Valgrind 说 openFiles 有一个 Invalid write of size 4 但我不知道那是什么意思

最佳答案

这一行有问题:

freq->files = calloc(1,sizeof(FILE**));

按照结构,每个文件都需要一个FILE*,但是这一行只分配一个FILE**,改成这样:

freq->files = calloc(freq->numFiles, sizeof(FILE*));

关于c - 大量输入文件导致程序根本无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36952581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com