结构简单的问题

时间:2014-08-12 00:38:44

标签: c struct

我在c。

的第一步

容易入手,但我刚刚到达一个我不明白的地方...因为我觉得我做得很好。

它的结构,struct里面有另一个结构,但是当我创建一个变量时我不能修改它的参数。

示例:

#include <stdio.h>
#include <string.h>

#define MAX_SND 1000000

struct date {
    int day;
    int month;
    int year;
};

struct sending {
    char destiny[100];
    char address[100];
    char town[30];
    char id[9];
    struct date send_date;
};

struct sending_queue {
    struct sending elements[MAX_SND];
    int act;
};

main()
{   
   struct date one;   
   one.day = 34;
   one.month = 3;
   one.year = 1999;

   struct sending two;
   strcpy(two.id,"ABCD1234");

   printf("%s %i ", two.id, one.year);

   //struct sending_queue lotof;
   //lotof.act = 0;   
}

如果我删除coments ...我收到错误:分段错误(核心转储) 我知道如果你这样做会更好 但我需要一个简单的例子

为什么会出现此错误?和解决方案? 提前谢谢,见你

1 个答案:

答案 0 :(得分:0)

您将一个大对象声明为局部变量。您的对象可能不适合本地内存(通常是 - 堆栈)。您的struct sending大小超过239个字节。 MAX_SND内的struct sending_queue个结构数组将占用超过239 * 1000000个字节,大约为227 MB。虽然227 MB不是现代标准的灾难,但对于本地对象来说,这仍然可能过多,具体取决于平台上的堆栈大小。

如果你真的需要一个事先分配的大小的对象(这是一个很大的&#34;如果&#34;),最好的想法是使用malloc动态分配它。