c-分段错误(核心转储)指针问题



当我尝试用参数运行程序时,遇到了分段错误。现在我已经在GDB中运行了它,发现了有问题的行,它看起来像这样:

*dstip = (*optarg);

原型是:

char *dstip;

最后,它被称为

char *filter = ("ip dest host %s", dstip);

现在回过头来看,我并不惊讶它看起来不起作用。。。坦率地说,这是错误的,通过完全删除这些行(并更改过滤器文本)来解决问题。然而,我需要输入的IPv4地址显示在错误消息过滤器中,它将在中使用,由于对指针毫无用处,并且来回尝试了不同的事情,我无法正确处理。也就是说,我只得到warning initialization makes pointer from integer之类的。。。该怎么办?

语句

*dstip = (*optarg);

不将CCD_ 2设置为指向CCD_。相反,它将dstip指向的第一个字符设置为与optarg指向的第一字符相同的值。即,它与相同

dstip[0] = optarg[0];

由于dstip是一个未初始化的指针,因此更改内存中未分配的区域会导致奇怪的事情发生。

此外,表达

("ip dest host %s", dstip)

不会做你认为它会做的事情,至少如果你认为它将返回一个格式化的字符串。它真正的作用是使用逗号运算符,它计算逗号两侧的表达式,但只返回逗号右侧表达式的结果。

相关内容

  • 没有找到相关文章

最新更新