gpt4 book ai didi

C 指针未正确分配

转载 作者:太空狗 更新时间:2023-10-29 15:39:05 27 4
gpt4 key购买 nike

我正在创建一个名为“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;
}

出于某种原因,list[0] 和 list[1] 没有被分配给创建的结构,但是 list[2] 到 list[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);

您的list 分配同样是错误的。你应该分配:

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

关于C 指针未正确分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com