#include<stdio.h>
#include <stdlib.h>
struct a1 {
int value ;
};
struct cf {
struct a1 *a1;
int val;
};
main(){
struct cf *cf = malloc(sizeof(struct cf));
cf->a1->value = 45;
printf("cf->a1->value = %d \n",cf->a1->value);
}
当我想要执行这个C代码时,我遇到了分段错误(核心转储)!
答案 0 :(得分:3)
原因是您要为cf
分配所需的内存,而不是a1
。
你必须做类似
#include<stdio.h>
#include <stdlib.h>
struct a1 {
int value ;
};
struct cf {
struct a1 *a1;
int val;
};
main(){
struct cf *cf = malloc(sizeof(struct cf));
cf->a1 = malloc(sizeof(struct a1));
cf->a1->value = 45;
printf("cf->a1->value = %d \n",cf->a1->value);
}
答案 1 :(得分:0)
由于尚未为a1
分配内存,因此会出现分段错误。
您还应该将malloc从void*
转换为struct cf*
,如果一切顺利,则将主函数声明为int main()
和return 0
。
以下是您的问题的解决方案:
#include<stdio.h>
#include <stdlib.h>
struct a1 {
int value ;
};
struct cf {
struct a1 *a1;
int val;
};
int main(){
struct cf *cf = (struct cf*)malloc(sizeof(struct cf));
cf->a1=(struct a1*)malloc(sizeof(struct a1));
cf->a1->value = 45;
printf("cf->a1->value = %d \n",cf->a1->value);
}
答案 2 :(得分:0)
malloc(sizeof(struct cf));
在这里你要为struct cf
分配内存,它有成员作为指针a1
&amp; val
。指针a1
指向结构类型a1
,其中包含成员value
。但是malloc()
仅为指针分配内存,但它没有为它具有value
的成员分配内存。在那里,您尝试将45
写入未知的内存。
为结构a1
分配内存,cf->a1 = malloc(sizeof(struct a1));