递归二叉树给出了内存访问错误

时间:2017-11-27 09:01:17

标签: c memory access

我们需要创建一个包含textfiles内容的二叉树。指针selection_a和selection_b指向direcetory中的另一个文本文件。

文本文件的结构如下: 1. line:标题 2.行:OptionA 3. line:OptionB 4. - n。 line:Text。

第一个文件在启动程序时作为参数给出。所有文件都应保存在程序的开头。 然后显示第一个文件的文本,用户可以输入A或B继续。根据选择,显示文件选项A / B的文本,他可以再次决定。

树的最后一个文件不包含选项:2。和3.行是“ - \ n”。

问题是,此代码只读取第一棵树的所有选项A文件。它不读取任何B选项。 最后,程序显示内存访问错误。

我知道代码可能有点像caotic,但我们是编程的初学者。 希望有人可以提供帮助。 这是代码:

struct story_file
{
  char *title;
  char *text;
  struct story_file *selection_a;
  struct story_file *selection_b;
};

1 个答案:

答案 0 :(得分:1)

您的主要问题出在current->text

首先,将其设置为current->text = "";,使其指向空字符串(和只读文字)。你应该把它设置为零:

 current->text = 0;

然后你要为它添加文本,但忘记为它分配内存:

 current->text = strcat(current->text,lines);

你应该这样做:

int currlen, linelen;
linelen= strlen(lines);
if (current->text) currlen= strlen(current->text); else currlen= 0;
char *newtext= malloc(currlen+linelen+1);
if (current->text) strcpy(newtext, current->text); else *newtext= 0;
strcat(newtext, lines);
if (current->text) free(current->text);
current->text= newtext;