C strchr引起的“;大小为1的读取无效;在瓦尔格林
我正在运行一个程序,虽然代码运行正常,但Valgrind显示“大小为1的无效写入”,并且地址0x1FFFFFA00位于线程1的堆栈上。这是使用程序中的另一个函数C strchr引起的“;大小为1的读取无效;在瓦尔格林,c,pointers,valgrind,dynamic-memory-allocation,strchr,C,Pointers,Valgrind,Dynamic Memory Allocation,Strchr,我正在运行一个程序,虽然代码运行正常,但Valgrind显示“大小为1的无效写入”,并且地址0x1FFFFFA00位于线程1的堆栈上。这是使用程序中的另一个函数strchr和strchrn实现的 我已经尝试使用index来定位逗号,以及strchr和我的strchr函数,但它们都在Valgrind中返回相同的警告 typedef struct data_s Data; struct data_s { float temperature; int year; int mo
strchr
和strchrn
实现的
我已经尝试使用index来定位逗号,以及strchr
和我的strchr
函数,但它们都在Valgrind中返回相同的警告
typedef struct data_s Data;
struct data_s {
float temperature;
int year;
int month;
int day;
})
下面代码的其余部分与comma1无关一个问题是,在函数
getData()
中,您返回一个指向缓冲区的指针,该缓冲区在函数返回后立即超出范围
char缓冲区[INPUT_LINE_MAX]
声明为局部变量,并将在堆栈上分配。当函数返回时,此函数的内存将不再使用。因此,在您的程序中,在函数buildData()
中,变量readLine
指向堆栈上的一个位置,该位置可能会被下一个函数调用覆盖,至少部分覆盖。非常感谢!我改变了我的代码,它工作了!
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, ',');