为什么在以下C代码中发生分段错误

时间:2014-02-25 16:27:49

标签: c

#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代码时,我遇到了分段错误(核心转储)!

3 个答案:

答案 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));