使用malloc创建的结构设置值的Segfault

时间:2017-10-25 16:01:49

标签: c pointers struct segmentation-fault malloc

我的C代码有问题,我无法理解 在这里,我尝试使用malloc创建结构指针,但每当我尝试将值设置为创建的结构时,我都会遇到分段错误错误。我使用GDB来确定错误所在的位置,但我对如何解决它没有多少见解。如果有人能让我了解这一点,我会很感激。

这不是完整的代码,而只是重要的部分。

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

typedef struct str_s {
   int size;
   bool (*func)(const void* a, const void* b);
} *Str; // Cannot change this

Str create(bool (*func)(const void *a, const void *b)) {
  MapADT* str = malloc(sizeof(struct mapadt_s));
  (*str)->size = 0; // Segmentation Fault here
  (*str)->func= func;

  return *kv_map;
}

1 个答案:

答案 0 :(得分:-1)

这是一个工作版本,segfault来自于你试图两次推导你的str指针这一事实。此外,您必须返回指向已分配内存的指针而不是值。不要忘记释放分配的内存;)

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

typedef struct str_s {
   int size;
   bool (*func)(const void* a, const void* b);
} my_struct;

my_struct *create(bool (*func)(const void *a, const void *b)) {
  my_struct *str = malloc(sizeof(my_struct));
  str->size = 0;
  str->func = func;

  return str;
}