所以我需要在二进制文件中写入和读取,但似乎不能这样做,并且在使用readFromFile时,程序崩溃了。我需要帮助写入二进制文件,然后从中读取并在关闭程序后重新开始工作。我不知道我做错了什么,而且我已经google了很长时间了,但没有结果。这是我的程序代码:
angle=$(convert xc: -format "%[fx:-60*random()+30]" info:)
convert pattern.png -background none -rotate $angle result.png
答案 0 :(得分:2)
&subjects->subjs[i],
这是未定义的行为。访问垃圾值。您需要正确初始化它正确的内存地址。你不能在任何地方做这件事。
(*subjects).subjs
或subjects->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
并相应分配?是的,你应该这就是我在所示例子中所做的。
每当你有一个指针变量时,问问自己它包含什么 - 如果值是你所知道的,而不是一些随机的垃圾值。