voID RemoveStringAt(char *array[],int pos){ if((array[pos]!=NulL)&&(array!=NulL)&&(pos!=NulL)) { free(array[pos]); array[pos]=NulL; }}
该项目的一个规范是传递NulL值时不应导致seg错误.这是我尝试时发生的事情:
RemoveStringAt(NulL,NulL);
并输出:
Segmentation fault (core dumped)
如果甚至执行方法的核心部分的条件之一是传递的值都不是NulL,为什么我会遇到分段错误?
解决方法 因为您在检查中取消引用NulL指针:if((array[pos]!=NulL)...
数组是NulL所以你不能做数组[pos].在C中,if条件从左到右进行评估,所以只需将条件更改为如下所示.也就是说,更改排序,以便在数组为NulL时永远不会计算数组[pos].
if((array!=NulL) && (pos < MAX_POS) && (array[pos]!=NulL))
请注意,原始检查pos!= NulL不正确.出于几个原因. 1. pos不是指针,因此将它与NulL进行比较在语义上是不正确的. 2. NulL通常定义为0,0是有效的pos值.因此,您需要定义一个MAX_POS,指定数组中的条目数或更好,然后将其作为显式参数传递给函数.
最后,在所有这些之后,你实际上甚至不必拥有数组[pos]!= NulL检查条件,如果你不想.即使array [pos]为NulL,if块中的任何内容都不会导致segv,因为free被定义为接受NulL参数.
总结以上是内存溢出为你收集整理的传递NULL指针时C分段错误,尽管条件告诉函数如果传递NULL参数不运行?全部内容,希望文章能够帮你解决传递NULL指针时C分段错误,尽管条件告诉函数如果传递NULL参数不运行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)