未正确分配C指针

未正确分配C指针,c,memory,pointers,variable-assignment,C,Memory,Pointers,Variable Assignment,我正在创建一个名为“mcguffins”的结构数组,我得到了一个非常奇怪的错误 //prints the info in a mcguffin void printInfo(int i,struct mcguffin * new) { printf("%d \tNum: %d\t Word: %s\n", 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: %d\t Word: %s\n", i, new->num, new->word);
    }

    //creates a new mcguffin
    struct mcguffin * addMG(int n, char * w) {
      printf("Expected output:\n\tNum: %d\tWord: %s\n", n, w);
      struct mcguffin * new;
      new = malloc(sizeof *new);
      new->num = n;
      strncpy(new->word, w, sizeof(char[20]));
      printf("Actual output: \n\t");
      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工作正常,确实为列表[0]和列表[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];
};
您为指向mcguffin的指针分配了足够的空间。放下
*
。更好的是,将其更改为:

new = malloc(sizeof *new);
您的
列表
分配也同样错误。您应该分配:

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

我已经相应地更改了代码,但是我仍然得到了一个非常奇怪的错误,除了list[0]和list[1]之外,其他所有内容都被分配了。@user1834200
mcguffin
是如何声明的?它是在一个单独的头文件中声明的,如下所示:struct mcguffin{int num;char word[20];};这是我必须在分配给我的作业中使用的东西,因此我不能对此进行任何更改。@user1834200您能用更新的代码更新原始帖子吗?
struct mcguffin **list = malloc(10 * sizeof *list);