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

时间:2012-08-19 16:49:26

标签: c pointers segmentation-fault ip-address

当我尝试使用参数运行程序时,我收到了分段错误错误。现在我通过GDB运行它并找到有问题的行,它看起来像这样:

*dstip = (*optarg);

原型是:

char *dstip;

最后在这一行中被调用:

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

现在回过头来看,我并不感到惊讶它看起来不起作用......坦率地说,错误地通过删除这些行(并改变过滤器文本)来解决问题。但是,我需要将输入的IPv4地址显示在错误消息过滤器中,并且对指针没用,并且来回尝试过不同的东西我无法做到正确。也就是说,我只得到warning initialization makes pointer from integer之类的......怎么办?

1 个答案:

答案 0 :(得分:5)

声明

*dstip = (*optarg);

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

相同
dstip[0] = optarg[0];

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

另外,表达式

("ip dest host %s", dstip)

不会按照您的想法执行操作,至少如果您认为它将返回格式化的字符串。它真正做的是使用逗号运算符来计算逗号两边的表达式,但只返回逗号右侧表达式的结果。