C语言 给出分段错误11的Malloc语句



对于一个项目,我正在学习使用c中的malloc/realloc,但我不明白为什么这段代码会给我一个段错误!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
typedef struct word_data word_data_t;
typedef struct data data_t;
typedef struct index_data index_data_t; 
struct word_data {
  int docunumber;
  int freq;
};
struct data {
  char *word;
  int total_docs;
word_data_t *data;
};
struct index_data {
  data_t *index_data_array;
};
/* Inside a function called from main */
index_data_t *index_data=NULL;
index_data->index_data_array = (data_t*)malloc(sizeof(*(index_data- >index_data_array))*INITIAL_ALLOCATION);

在尝试了一堆东西和搜索stackoverflow之后,我真的卡住了!任何信息都有帮助!

感谢编辑:

谢谢你的帮助!但我仍然在程序中遇到了一个segfault,可能是因为类似的错误,但我已经尝试了一堆东西,不能让它工作,这里是我所有的malloc/realloc调用:

index_data = (index_data_t*)malloc(sizeof(*index_data)*INITIAL_ALLOCATION);
index_data->index_data_array = (data_t*)malloc(sizeof(*index_data- >index_data_array)*INITIAL_ALLOCATION);
index_data->index_data_array = realloc(index_data->index_data_array, current_size_outer_array*sizeof(*(index_data->index_data_array)))
index_data->index_data_array[index].word=malloc(strlen(word)+1);
index_data->index_data_array[index].word=entered_word;
index_data->index_data_array[index].data = (word_data_t *)malloc(sizeof(word_data_t)*INITIAL_ALLOCATION);
index_data->index_data_array[index].total_docs=atoi(word);
index_data->index_data_array[index].data = realloc(index_data-  >index_data_array[index].data, current_size_inner_array*(sizeof(*(index_data-   >index_data_array[index].data))))
index_data->index_data_array[index].data->docunumber = docunum;
index_data->index_data_array[index].data->freq = freq;

然后当我要打印一些东西的时候:

printf("%dn", index_data->index_data_array[0].total_docs);

我得到一个段错误,我错过了malloc再次或类似的?

谢谢

  • 你不需要所有这些类型
  • 不需要强制转换
  • sizeof *ptr给出ptr 指向对象的大小。
  • 恕我直言,没有casts&typedef的代码要清晰得多:

#include <stdlib.h>
struct thing {
        int type;
        char name[13];
        };
struct box {
        unsigned nthing;
        struct thing *things;
        };
struct box *make_box(unsigned thingcount)
{
struct box *thebox;
thebox = malloc (sizeof *thebox);    
if (!thebox) return NULL;
thebox->things = malloc (thingcount * sizeof *thebox->things);    
if (!thebox->things) { free(thebox); return NULL; }
thebox->nthing = thingcount;
return thebox;
}

试图访问来自NULL地址空间的元素。试试这个:

index_data = (index_data_t*)malloc(sizeof(*(index_data)));

那么,你可以这样填充数组:

index_data->index_data_array = (data_t*)malloc(sizeof(*(index_data->index_data_array))*INITIAL_ALLOCATION);

相关内容

  • 没有找到相关文章

最新更新