我正在为学校做一个项目,我已经设法通过对我的代码做一些非常笨拙的事情来解决这个问题。我有一个包含多个字段的结构,并且我正在尝试访问以下字段(因为它在名为 current_event 的结构中声明)。
int *number_of_couples;
然后在程序中我调用这个值,这样我就可以根据这个 *number_of_couples 字段动态分配一个数组。本质上,我试图将其用作“长度”运算符,因为 C 没有(好的)解决方案。
在我尝试实现以下代码之前:
int *permutable_array;
permutable_array = malloc((current_event->number_of_couples) * sizeof(int)); //Line 91
if(permutable_array == NULL){
panic("permutable_array"); //Ensures that Malloc was successful.
}
这又会引发以下错误:第 91 行:错误:对二进制 * 无效的操作数(有 'int *' 和 'unsigned int')
我做了一个非常草率的工作,因为此时我只想让程序正常工作(纯编程的第三个小时!摇滚!)。所以我实现了:
int *permutable_array;
int avoid_my_bug = (int) current_event->number_of_couples;
permutable_array = malloc(avoid_my_bug * sizeof(int));
if(permutable_array == NULL){
panic("permutable_array");
}
哪个有效。现在我有点理解它告诉我的错误。我怀疑这与我将 number_of_couples 的值作为指针存储在 current_event 中这一事实有关,它也是一个指针。因此,如果 number_of_couples 的值为 4,则程序获取该值的路径是:
ptr_to_current_event -> ptr_to_number_of_couples -> 4
我可以使用我草率的解决方法,但很明显我这样做是为了避免错误。我宁愿了解为什么代码无法编译。我也尝试过:
permutable_array = malloc((*current_event->number_of_couples) * sizeof(int)); //Line 91
它应该取消引用 current_event->number_of_couples 返回的指针,但是它崩溃了。有什么解决办法吗?
*编辑* 它由以下代码行初始化:
fscanf(input_file, "%i", ¤t_event->number_of_couples);
并且在到达我的代码之前被程序至少引用了三次(其中存储了一个有效的 int 值)。请记住,第二位有效,因此它肯定已初始化。