2012-01-30 134 views
0

我将问题简化为几行代码,但是我很难识别什么是非法的导致“访问冲突写入位置”的函数调用。我希望有人更好地使用C可以帮助我出去了?访问冲突在文件解析期间写入位置

代码打破输入是

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

任何提示都会很棒!谢谢

回答

4

你忘了&之前vn[normCount].vn3

顺便说一下,line[1] == 'n' && line[1] != 't'的要点是什么?

+0

复制粘贴代码。从所有行上都有!=的行[1]开始。马虎。我怎么错过&。我一直盯着这条线一个小时!谢谢! – meriley 2012-01-30 22:37:18

+0

:)提示:切勿忽略编译器警告。 (一个好的编译器告诉你代码中的问题) – asaelr 2012-01-30 22:38:35

0

的供给错误SCANF我参数的类型:

sscanf(line, "%*c%*c%f%f%f",    
     &vn[normCount].vn1, 
     &vn[normCount].vn2, 
     &vn[normCount].vn3); // address 
0
sscanf(line, "%*c%*c%f%f%f", &vn[normCount].vn1, &vn[normCount].vn2, vn[normCount].vn3); 
                    ^^^^ 

你忘了&。这导致vn[normCount].vn3中包含的值被评估为内存地址(您显然无法写入)。