【问题标题】:Bus error: 10 using malloc on struct pointer, C总线错误:10 在结构指针上使用 malloc,C
【发布时间】:2021-05-29 16:29:47
【问题描述】:

我正在尝试为结构指针分配一些内存。代码编译得很好,但是当我运行它时,我得到总线错误:用户输入他们的名字后 10 。我不确定我做错了什么,所以很感激任何帮助!

提前致谢:)

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

int main(){

    struct name{
        char *first;
        char *last;
    };

    struct name *user;

    char temp[10];

    printf("What is your first name?\n");
    scanf("%s", temp);
    user->first = (char*) malloc(strlen(temp)+1);
    strcpy(user->first, temp);

    printf("What is your last name?\n");
    scanf("%s", temp);
    user->last = (char*) malloc(strlen(temp)+1);
    strcpy(user->last, temp);

    printf("Your name is %s %s\n", user->first, user->last);

    free(user->first);
    free(user->last);

    user->first = NULL;
    user->last = NULL;

}

【问题讨论】:

  • 扪心自问,user 指向哪里? 因为当你做user-&gt;first = (char*) malloc(strlen(temp)+1); 时它是未初始化的。
  • 除了使用scanf("%9s", temp); 来确保不会覆盖缓冲区

标签: c malloc


【解决方案1】:

您没有为 user 分配内存来指向。所以它未初始化并试图取消引用指向undefined behavior的指针。

您需要为user 分配内存,就像为它的字段所做的那样:

struct name *user = malloc(sizeof *user);

【讨论】:

  • 啊,我明白了!谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 2010-10-19
  • 2012-05-17
  • 2018-12-03
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多