原来正确的函数,为了给函数里面的实现传递一个参数,于是就按照自己认为正确的方式写成 &struct_a->item_b. 原意是传递A指针指向的结构体中的B的地址过去,也就是B的指针。这个函数的前面也有一个参数是同样类型,所以自己就照着它的来写。
上午改完后,编译通过,但是却得到一个段错误。很奇怪的错误,gdb跟的话,也只跟到调用了这个修改后的函数的函数完成。如A函数调用B函数,我修改了B函数中的参数,按照上面写的,多加了一个参数。而C函数调用了A函数, 在C函数中,A函数结束后,就出现段错误。显示的是struct_a指向了一个不可使用的地址。也就是我修改C函数后,把struct_a的值修改了。
查了一遍相关的所有代码,没有任何地方有修改过这个地址所指向的值。最初以为是哪里的逻辑有问题,所以来来回回看了很多代码。后来把函数还原为改之前的样子,运行就没有问题。所以,那只能是我加的这个参数的问题。后来改成&(struct_a->item_b),程序运行正确。回去看了下item_b的类型,是一个指针。我不知道是不是因为指针的原因。
最难找的bug,其实真的不是什么大的错误,可能只是不小心少写的一个符号。不要太想当然的写代码了。
阅读(336) | 评论(0) | 转发(0) |