gpt4 book ai didi

C strchr 在 valgrind 中导致 "Invalid read of size 1"

转载 作者:行者123 更新时间:2023-11-30 19:01:30 24 4
gpt4 key购买 nike

我正在运行一个程序,虽然代码工作正常,但 Valgrind 显示“大小 1 的无效写入”,并且地址 0x1ffefffa00 位于线程 1 的堆栈上。使用 strchr 都发生了这种情况。和strchrn ,程序中的另一个函数。

我尝试使用索引来定位逗号,以及 strchr和我的strchr函数,但在 Valgrind 中都不断返回相同的警告

typedef struct data_s Data;

struct data_s {
float temperature;
int year;
int month;
int day;

};

char* getData(FILE* filename) {
char buffer[INPUT_LINE_MAX];
char* dataLine = fgets(buffer, INPUT_LINE_MAX, filename);
return dataLine;
}

Data* buildData(FILE* filename) {
char* readLine = getData(filename);
Data* new = malloc(sizeof(Data) + 1);
char* comma1 = strchr(readLine, ',');

下面的其余代码 comma1无关紧要

最佳答案

一个问题是,在函数 getData() 中,您返回一个指向缓冲区的指针,一旦函数返回,该指针就会超出范围。

char buffer[INPUT_LINE_MAX]; 被声明为局部变量并将在堆栈上分配。当函数返回时,将不再使用该内存。因此,在您的程序中,在函数 buildData() 中,变量 readLine 指向堆栈上的一个位置,该位置可能会被下一个函数覆盖(至少部分覆盖)来电

关于C strchr 在 valgrind 中导致 "Invalid read of size 1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704932/

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