【问题标题】:Access violation writing location during File Parsing文件解析期间访问冲突写入位置
【发布时间】:2012-01-30 22:31:52
【问题描述】:

我已将问题缩小到几行代码,但我无法确定导致“访问冲突写入位置”的函数调用的非法内容我希望使用 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++;
    }

任何提示都会很棒!谢谢

【问题讨论】:

    标签: c file-io access-violation


    【解决方案1】:

    您在vn[normCount].vn3 之前忘记了&

    对了,line[1] == 'n' && line[1] != 't'的意义何在?

    【讨论】:

    • 复制粘贴代码。从所有行 [1] 上都有 != 的那个。邋遢。我怎么会错过&。我已经盯着这条线差不多一个小时了!谢谢!
    • :) 提示:永远不要忽略编译器警告。 (一个好的编译器会告诉你代码中的问题)
    【解决方案2】:

    提供给 scanfi 的参数类型错误:

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

    【讨论】:

      【解决方案3】:
      sscanf(line, "%*c%*c%f%f%f", &vn[normCount].vn1, &vn[normCount].vn2, vn[normCount].vn3);
                                                                          ^^^^
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-15
        • 2020-09-04
        • 2012-12-05
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多