C结构总线错误10

时间:2012-11-18 17:35:38

标签: c struct structure

我在C中有一个stuct,我使用一个函数从用户那里获取结构的值。以下是我的结构。

typedef struct {
    char    *name;
    char    *chemical_symbol;
    char    *class;
    int     atomic_number;
    double  atomic_weight;
    int     *electrons;
} element_t;

这是我用来从用户那里获取值的函数。在询问化学符号后,问题在于此功能。我得到总线错误:10。我对总线错误的理解是当处理器无法尝试访问内存时。任何帮助表示赞赏。谢谢!

element_t scan_element() {

    element_t element;

    printf ("Enter New Element Information:\n\n");

    printf("Element Name: ");
    scanf("%s", element.name);

    printf("Element Chemical Symbol: ");
    scanf("%s", element.chemical_symbol);

    printf("Element Class: ");
    scanf("%s", element.class);

    printf("Element Atomic Number: ");
    scanf("%d", &element.atomic_number);

    printf("Element Atomic Weight: ");
    scanf("%lf", &element.atmoic_weight);

    printf("Element Electrons: ");
    scanf("%p", &element.electrons);

    return(element);
}

4 个答案:

答案 0 :(得分:4)

printf("Element Name: ");
scanf("%s", element.name);

您必须为element.name指向的对象分配内存,例如使用malloc。没有适当的分配element.name是一个无效的指针。

答案 1 :(得分:2)

您没有分配足够的内存来尝试读取字符串。

顺便说一下,你的上一个scanf很奇怪:你真的想问一个地址吗?这可能很危险。

答案 2 :(得分:2)

你需要分配内存。也许最好的(当然最简单的!)方式只是定义你的结构有字符数组(而不是字符指针)。

实施例

#define MAX_STRING 80
#define MAX_ELECTRONS 32

typedef struct {
    char    name[MAX_STRING];
    char    chemical_symbol[MAX_STRING];
    char    class[MAX_STRING];
    int     atomic_number;
    double  atmoic_weight;
    int     electrons[MAX_ELECTRONS];
} element_t;

答案 3 :(得分:0)

在扫描字符串之前,应为它们分配一些空间。例如:

void initialize( element_t * p ) {
  p->name = malloc( sizeof( char ) * MAXSIZE );
  p->chemical_symbol = malloc( sizeof( char ) * MAXSIZE );
  p->class = malloc( sizeof( char ) * MAXSIZE );
}

致电scan_element之前,请致电initialize。我相信它会正确编译。