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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |