程序在加载时不会写入文件并崩溃

时间:2017-11-29 18:13:40

标签: c

所以我需要在二进制文件中写入和读取,但似乎不能这样做,并且在使用readFromFile时,程序崩溃了。我需要帮助写入二进制文件,然后从中读取并在关闭程序后重新开始工作。我不知道我做错了什么,而且我已经google了很长时间了,但没有结果。这是我的程序代码:

angle=$(convert xc: -format "%[fx:-60*random()+30]" info:)
convert pattern.png -background none -rotate $angle result.png

1 个答案:

答案 0 :(得分:2)

&subjects->subjs[i],这是未定义的行为。访问垃圾值。您需要正确初始化它正确的内存地址。你不能在任何地方做这件事。

(*subjects).subjssubjects->subjs - >这并不是指向任何地方。它是NULL

此外,你不需要双指针。单个指针可以完成您想要做的事情。

typedef struct{
        Subject *subjs;
        int num_subjs;
}Subjects;

对于单指针,这就像

Subjects *subjects = malloc(sizeof(Subjects));
subjects->num_subjs = 10;
subjects->subjs = malloc(subjects->num_subjs * sizeof Subject);
subjects->subjs[0].subjName = malloc(40);

应检查每个malloc并返回值。如果它为NULL,那么继续进行或访问它将是错误的。

当你完成它时,free()就相应了。

一些基本的东西: -

  typedef struct{
          Subject *subjs;
          int num_subjs;
  }Subjects;

现在让我们看一下代码中的内容。

Op问为什么OP应该初始化并且isn; t subjects->num_subjs = 0; subjects->subjs = NULL;还不够?

指针是一个应该保存地址的变量。此处Subject*将保存Subject类型变量的地址。

现在,您最初初始化它。

您已分配内存并将其分配给Subject*变量subjects

现在让我们看看你还做了什么。

subjects->num_subjs = 0;
subjects->subjs = NULL;

你初始化了它。然后你尝试访问它(subjects->subjs[i])。你能告诉我它指向的地方吗? (subject->subjs)?

答案是否定的。它指向无处。它现在包含NULL值。你认为你应该告诉它你想要持有多少subject并相应分配?是的,你应该这就是我在所示例子中所做的。

每当你有一个指针变量时,问问自己它包含什么 - 如果值是你所知道的,而不是一些随机的垃圾值。