我已经将问题缩小到几行代码,但是我很难识别出函数调用的非法行为导致“访问违规写入位置”我希望有人能帮助我更好吗?
代码正在打破的输入是
vn 0.185492 -0.005249 0.982604
我想将3个浮点值赋给一个Struct的数组vn
struct Normals{
float vn1;
float vn2;
float vn3;
};
struct Normals vn[50000];
并且崩溃的代码是
if (line[0] == 'v' && line[1] == 'n' && line[1] != 't'){
sscanf(line, "%*c%*c%f%f%f",
&vn[normCount].vn1,
&vn[normCount].vn2,
vn[normCount].vn3);
normCount++;
}
任何提示都会很棒!感谢
答案 0 :(得分:4)
您忘记了&
之前的vn[normCount].vn3
。
顺便说一下,line[1] == 'n' && line[1] != 't'
是什么意思?
答案 1 :(得分:0)
提供给scanf的参数类型错误:
sscanf(line, "%*c%*c%f%f%f",
&vn[normCount].vn1,
&vn[normCount].vn2,
&vn[normCount].vn3); // address
答案 2 :(得分:0)
sscanf(line, "%*c%*c%f%f%f", &vn[normCount].vn1, &vn[normCount].vn2, vn[normCount].vn3);
^^^^
你忘了&
。这导致vn[normCount].vn3
中包含的值被计算为内存地址(您显然无权写入)。