-2

所以我试图将字符串值分配给数组中的对象。

目标代码是:

typedef struct BiTreeData_ {
    char* word;
    int start_word_count;
    int end_word_count;
    int start_ranking;
    int end_ranking;
} BiTreeData;

在我的 main 中,我使用以下方法创建了一个指向 BiTreeData 的指针数组:

BiTreeData **dataarray;
dataarray=(BiTreeData**)malloc(sizeof(BiTreeData*)*maintree.size);

我尝试为结构中的一个变量赋值:

int z = dataarray[i]->start_word_count;

程序崩溃。任何帮助,将不胜感激。谢谢你。

4

4 回答 4

2

你的代码在这里

BiTreeData **dataarray;

dataarray=(BiTreeData*)malloc(sizeof(BiTreeData)*maintree.size);

为数组分配内存空间,BitTreeData*但您没有为BitTreeData对象本身分配任何空间。您只有一个指向未初始化内存的动态指针数组。

BitTreeData如果您只创建一个数组而不是指针数组,它可能会容易得多。您可以通过使用来实现这一点

 BiTreeData *dataarray;
 dataarray=(BiTreeData*)malloc(sizeof(BiTreeData)*maintree.size);

这只是创建一个数组BitTreeData - 然后您可以像访问任何其他数组一样访问数组中的每个项目(现在记住数组BitTreeData不是BitTreeData*

于 2012-11-09T20:38:02.493 回答
0

你有定义的原因吗

BiTreeData **dataarray;

为了让它按照你想要的方式工作,我认为你需要将它定义为:

BiTreeData *dataarray;

这将允许您 malloc 一个 BiTreeData 结构数组。

要创建结构数组:

BiTreeData *dataarray;

在堆上为结构数组分配内存:

dataarray = malloc(sizeof(BiTreeData)*maintree.size);

要设置数组中结构元素的值:

int z = 5;
dataarray[i].start_word_count = z;

要从结构数组中提取值:

int z = dataarray[i].start_word_count;
于 2012-11-09T20:37:16.843 回答
0

您必须为数组中的每个元素分配内存dataarray

dataarray[i] = (BiTreeData *) malloc ((sizeof(BiTreeData)

您输入的以下代码

array=(BiTreeData**)malloc(sizeof(BiTreeData*)*maintree.size);

使用此代码,您已经分配了指针数组。但是这些指针还没有指向任何内容。所以你必须为数组中的每个指针分配内存

于 2012-11-09T20:45:05.730 回答
-1

由于您正在分配一个指针数组,因此元素的大小应该是 的大小BiTreeData *,而不是BiTreeData

dataarray= (BiTreeData **)malloc(sizeof(BiTreeData *) * maintree.size);

编辑
该问题已被编辑以纠正此错误。

于 2012-11-09T20:37:13.367 回答