**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
这篇文章是编辑和提交审查2天前。
Improve this question
编译完我的代码后,我遇到了一些关于内存的问题,在我的linux终端上运行./valgrind后,我遇到了这个函数的以下错误:
从文件读取行时大小为8的写入无效。
下面是我的函数read_lines_from_file
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int lines_count = 0;
char** read_lines_from_file(FILE* file) {
fseek(file, 0, SEEK_SET);
char** lines = NULL;// ça renvoie NULL si le fichier est vide
char line[100];
while (fgets(line, 100, file)) {// nous faisons l'hypothèse qu'une ligne ne dépasse pas 100 caractères
line[strlen(line)-1]='\0';// on enlève le \n
lines = realloc(lines, (lines_count + 1) * sizeof(char*));
lines[lines_count] = malloc(strlen(line) + 1);
strcpy(lines[lines_count], line);
lines_count++;
}
return lines;
}
我不明白它从何而来,我如何纠正,以消除这个错误。
1条答案
按热度按时间bvhaajcl1#
代码至少存在以下问题:
不清楚是否解决了“拆分时大小为1的无效写入”。
调用方缺少有关已读取多少行的信息
read_lines_from_file
在第二次呼叫时没有被重置为0,因此向呼叫者传达了错误的线路数量。黑客利用
line[strlen(line)-1]='\0';
是UB,其中读取的第一个字符是 * 空字符 *。此外,输入不一定包括
'\n'
。缺少错误检查
代码不检查分配错误。
100多个字符的行处理不当