加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C指针未正确分配

发布时间:2020-12-16 07:33:35 所属栏目:百科 来源:网络整理
导读:我正在创建一个名为“mcguffins”的结构数组,我得到一个非常奇怪的错误. //prints the info in a mcguffin void printInfo(int i,struct mcguffin * new) { printf("%d tNum: %dt Word: %sn",i,new-num,new-word); } //creates a new mcguffin struct mcg
我正在创建一个名为“mcguffins”的结构数组,我得到一个非常奇怪的错误.

//prints the info in a mcguffin 
    void printInfo(int i,struct mcguffin * new) {
      printf("%d tNum: %dt Word: %sn",i,new->num,new->word);
    }

    //creates a new mcguffin
    struct mcguffin * addMG(int n,char * w) {
      printf("Expected output:ntNum: %dtWord: %sn",n,w);
      struct mcguffin * new;
      new = malloc(sizeof *new);
      new->num = n;
      strncpy(new->word,w,sizeof(char[20]));
      printf("Actual output: nt");
      printInfo(1,new);
      return new;
    }

//creates a list of mcguffin pointers,and sets these pointers to new mcguffins
struct mcguffin ** writeList() {
  struct mcguffin ** list = malloc(10 * sizeof(*list));
  list[0] = addMG(2,"Jeter");
  list[1] = addMG(14,"Granderson");
  list[2] = addMG(25,"Teixeira");
  list[3] = addMG(13,"Rodriguez");
  list[4] = addMG(24,"Cano");
  list[5] = addMG(33,"Swisher");
  list[6] = addMG(55,"Martin");
  list[7] = addMG(20,"Posada");
  list[8] = addMG(11,"Gardner");
  list[9] = addMG(42,"Mo");
  return list;
}

由于某种原因,列表[0]和列表[1]未分配给创建的结构,但列表[2]到列表[9]是. addMG工作正常,并为list [0]和list [1]创建结构,但出于某种原因,当我尝试在它们上使用printInfo时,它打印出一个内存地址,其中new- > num应该去并且不打印new-> word.

0   Num: 30519472    Word: 
1   Num: 30519600    Word: 
2   Num: 25  Word: Teixeira
3   Num: 13  Word: Rodriguez
4   Num: 24  Word: Cano
5   Num: 33  Word: Swisher
6   Num: 55  Word: Martin
7   Num: 20  Word: Posada
8   Num: 11  Word: Gardner
9   Num: 42  Word: Mo

这可能是一些愚蠢的错误,因为我是C的新手,但任何帮助都会受到赞赏.

编辑:为了澄清,mcguffins在一个单独的头文件中声明,如下所示:

struct mcguffin {

  int num;
  char word[20];
};

解决方法

new = (struct mcguffin *)malloc(sizeof(struct mcguffin *));
                                                      ^^

你正在为指向mcguffin的指针分配足够的空间.放下*.更好的是,将其更改为:

new = malloc(sizeof *new);

您的列表分配同样错误.你应该分配:

struct mcguffin **list = malloc(10 * sizeof *list);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读