我想得到这个代码的工作,我用Google搜索并在efnet和freenode中询问,但我找不到答案。
我想要的是将结构woot
分配给另一个二维结构woot *
,我需要malloc
来做到这一点。
然后,我如何在那里使用malloc
以及如何分配结构?感谢。
#include <stdio.h>
struct omg {
int foo;
};
struct woot {
struct omg *localfoo;
int foo;
};
int a = sizeof(struct woot);
int main(void){
struct woot *what[10][10] = (struct woot *) malloc(100*a);
struct omg hahaha[100];
hahaha[1].foo = 15;
what[1][6].localfoo = &hahaha[1];
}
答案 0 :(得分:0)
struct woot *what[10][10] = (struct woot *) malloc(100*a);
我很好奇,这段代码甚至可以编译吗? (编辑:不,它没有。)无论如何:
struct woot *what[10][10];
就足够了。(不是真的答案,我知道......我会把它作为一个简单的评论发布,但我还没有足够的分数。)
编辑哎呀,其他人在我写这篇文章的同时指出了相同的内容。
新修改:这是一个更好的代码版本,更正了一些错误:
#include <stdio.h>
#include <stdlib.h> // needed for malloc()
struct omg {
int foo;
};
struct woot {
struct omg *localfoo;
int foo;
};
int main(void){
const int a = sizeof(struct woot); /* there is no reason "a" should be global...
actually, "a" is not needed at all, and, even if it
were needed, it should be declared as "const" :) */
struct woot *what[10][10];
struct omg hahaha[100];
hahaha[1].foo = 15;
what[1][6]->localfoo = &hahaha[1];
what[7][2] = malloc(a); // I would write "malloc(sizeof(struct woot))"
return 0; // main() should return an int, as declared!
}
答案 1 :(得分:0)
您正在尝试使用标量值(malloc返回的指针)初始化数组。如果你真的想要一个10×10的结构指针矩阵(而不是10×10矩阵的结构),你不需要malloc:
//Statically allocated 10x10 matrix of pointers, no need for malloc.
struct woot *what[10][10];
指定指向该矩阵中单元格的指针:
struct woot oneSpecificWoot;
what[1][2] = &oneSpecificWoot;
如果确实如此,真的你想要什么,那么你可以动态地创建一堆woot来填充它。像这样:
int i, j;
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
what[i][j] = malloc(sizeof(struct woot));
//Of course, you should always test the return value of malloc to make sure
// it's not NULL.
}
}
但如果你要这样做,你也可以自己静态地分配woot
:
//A 10x10 matrix of woots, no malloc required.
struct woot what[10][10];
如果在其他地方创建woot,第一种情况(指针的二维数组)会更有可能,你只想在网格中引用它们,或者如果你不知道编译时网格的尺寸。但是在你的代码中,你使用malloc来创建固定数量的它们,所以你也可以让编译器静态地分配它们。