将数据加载到结构数组C时出现分段错误

时间:2018-04-23 18:33:39

标签: c windows segmentation-fault

当我尝试从文件中读取值并将数据加载到struct vector中时,我遇到了分段错误。第一次出现分段错误的行在代码中指示。我在Windows机器上运行它。我将不胜感激任何帮助。

#include <stdio.h>
#include <stdlib.h>

typedef struct box
{
    int height, width, depth, value, rotation;
} Box;


int main(int argc, char *argv[] )
{

    FILE *in;
    int i=0;
    int j=0;
    int k=0;
    int l=0;
    int value;
    int n_boxes;
    int max_height;
    Box *boxes = (Box*) malloc(sizeof(Box)*2*n_boxes);

    in = fopen("stk10.data", "r");

    if(in == NULL)
        printf("Couldn't open the file\n");
    else
    {
        while( (fscanf(in, "%d", &value))!=EOF )
        {
            if(i==0)
                n_boxes= value;
            if(i==1)
                max_height = value;
            if(i>=2 && i<n_boxes+2)
            {
                boxes[j].value = value; //segmentation fault here
                j++;
            }
            if(i>=n_boxes+2)
            {
                if(k%3==0)
                    boxes[l].width = value;
                if(k%3==1)
                    boxes[l].height = value;
                if(k%3==2)
                    boxes[l].depth = value;
                boxes[l].rotation = 1;
                k++;
                if(k%3==0)
                    l++;
            }
            i++;
        }
    }

    free(boxes);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

发生错误是因为n_box未初始化。我在循环外读取n_box并在读取n_boxes后调用malloc函数,如注释部分所示。