【发布时间】:2015-09-08 03:52:46
【问题描述】:
我有一个处理字符串数组的程序。其中一种方法从所述数组中的指定位置删除字符串。代码如下:
void RemoveStringAt(char *array[], int pos)
{
if((array[pos]!=NULL)&&(array!=NULL)&&(pos!=NULL))
{
free(array[pos]);
array[pos]=NULL;
}
}
该项目的一个规范是它在传递 NULL 值时不应导致段错误。这是我尝试时发生的情况:
RemoveStringAt(NULL, NULL);
还有输出:
Segmentation fault (core dumped)
如果执行该方法的核心部分的条件之一是传递的值都不能为 NULL,为什么我会遇到分段错误?
【问题讨论】:
-
您的支票顺序错误。
array[pos]在检查array != NULL之前导致 seg 错误。 -
pos != NULL是语义错误;pos是一个整数。如果你的意思是pos != 0,那就写吧 -
你害怕空格吗?
if (array && pos != 0 && array[pos])更清晰。无需将指针与 NULL 进行比较 -
这个测试
NULL != array[pos]是多余的,因为free()接受NULL。 -
另外
int最好是size_t,这是索引数组的首选类型。这里也不需要负值。
标签: c string segmentation-fault