文件解析期间访问冲突写入位置

时间:2012-01-30 22:31:52

标签: c file-io access-violation

我已经将问题缩小到几行代码,但是我很难识别出函数调用的非法行为导致“访问违规写入位置”我希望有人能帮助我更好吗?

代码正在打破的输入是

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++;
    }

任何提示都会很棒!感谢

3 个答案:

答案 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中包含的值被计算为内存地址(您显然无权写入)。