所以我有3个文件:main.c,countries.h和country.c
我在国家/地区中声明了称为“国家/地区”的结构的指针。h
我已将countrys.h包含在countrys.c和main.c中
并宣布了该结构在各国的自身地位。c
国家/地区
typedef struct Country* pCountry;
国家/地区
struct Country {
char *name;
pCity cities;
int numCities;
pTerritory countryTerr;
};
现在,我想使用malloc创建Country结构的指针数组
所以我做到了:
pCountry countries_array;
countries_array = (pCountry);
malloc(num_of_countries*sizeof(countries_array));
并为每个指针分配指针,即使使用了malloc似乎也行不通
使用[]将指针分配给数组中的元素:
countries_array[0]= new_pointer;
我得到“无效使用未定义结构国家”和“取消指向不完整的指针”,
代码有什么问题?
谢谢
答案 0 :(得分:1)
看起来不错。只需将其分配给相同类型的struct Country
。另外,如注释中所指出的,它应该是malloc num_of_countries * sizeof struct Country
(不是指针类型),现在在下面正确地将其取消引用为sizeof(* countries_array),这也可以使用。
pCountry countries_array;
countries_array = malloc(num_of_countries * sizeof (*countries_array));
struct Country Jefferson = {"Jefferson", 1,2,3 };
countries_array[0] = Jefferson;
// don't forget to free the memory when no longer needed.
free (countries_array);
如果我们必须将指针放入此结构数组,则可以取消引用该指针,例如countries_array [0] = * pointer,或者...我们可以将countries_array声明为< em> pointers ,而不是结构数组。也许这就是您想要的。无论哪种方式,实际结构都必须在某个地方占用内存...
pCountry *countries_array = malloc(num_of_countries*sizeof countries_array);
pCountry j = &Jefferson; // `&`, "address of" operator
countries_array[0] = j; // put a `pointer` into the array...