This question already has answers here:
Return a string from function to main
(3个答案)
6个月前关闭。
我正在运行一个程序,尽管代码工作正常,但Valgrind显示的是'1号无效写入',并且地址0x1ffefffa00在线程1的堆栈上。这是使用
我尝试使用索引来定位逗号以及
};
(3个答案)
6个月前关闭。
我正在运行一个程序,尽管代码工作正常,但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 - C strchr在valgrind中导致“大小为1的无效读取” ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57704932/
10-11 16:22