让我的结构是:
typedef struct{
double x;
double y;
} punt;
typedef struct{
char tip;
punt infEsq
punt supDret;
} rectangle;
typedef struct{
rectangle *llista;
int numRect;
int midaMax;
} taulaRectangle;
情境化
“平底锅”代表一个观点。
“矩形”,char指示是正方形[q]还是矩形[r],两个点是矩形的左下角点(infEsq)和右上角点(supDret)。
“ TaulaRectangle”映射结构类型为“ rectangle”的列表(或表),指示它具有[numRect]个矩形,以及可以容纳[midaMax]个矩形(如果我没记错的话,它指示[llista]的尺寸) )。
现在,我想编写一个函数来初始化一个指向“ taulaRectangle”的指针,如下所示:
void initaula(taulaRectangle *t,int n) /*n is associated to midaMax*/
我不会发布我的意图来编码有效的初始化函数,因为我相信它们与我想要实现的目标并不接近,尽管这是我尝试过类似尝试的类似情况:
void inipunt(punt *b){
b->x=0;
b->y=1;
return;
}
int main (void){
double b,n;
punt *a;
inipunt(a);
puts("guay");
a.x=b;
a.y=n;
printf("a.x=%lf a.y=%lf",b,n); /*I know this association is not necessary
but if I directly print a.x a.y it does
not work either, also a fail is *(a.x),*
(a.y) */
return 0;
}
编译器(gcc -ansi -Wall)返回:
final1.c:30:2:错误:请求成员“ x”的内容不是
结构或联合a.x = b; ^ final1.c:31:2:错误:要求
成员“ y”(不是结构或联合)a.y = n; ^
综合来说,我希望能够声明一个指向“ taulaRectangle”的指针,并使用“ void initaula()”对其进行初始化,我键入了上面的示例,因为我相信除了“ void inipunt( )”我不必为结构中的指针分配内存,我认为问题的根源在于我如何在我的void函数中处理结构的指针。
很抱歉给您一个长期的问题,如果有人可以帮助,我们将不胜感激。
最佳答案
正如Eugene在评论中指出的那样,未分配指针。
当您执行punt *a;
时,您仅分配了指向该结构的指针,但它尚未指向任何内容。尚未初始化。
请检查未初始化的变量,因为它们可能有任何值。您不知道未初始化的指针可能指向什么。
您有两个解决此问题的方法:
通过执行punt a;
为堆栈中的结构分配空间。在这种情况下,a
是结构。
通过执行punt *a = malloc(sizeof(punt))
为堆中的结构分配空间。在这种情况下,a
是指向该结构的指针。
如果在堆栈中分配空间,则要获取a的指针,应执行&a
。
请记住,要访问指针后面的结构,请使用->
而不是.
。
这应该工作:
void inipunt(punt *p) {
p->x = 0;
p->y = 1;
}
int main() {
punt a;
inipunt(&a);
printf("%lf %lf\n", a.x, a.y);
punt *b = malloc(sizeof(punt)); // You should check if it returns NULL, in case of an error.
inipunt(b);
printf("%lf %lf\n", b->x, b->y);
return 0;
}