【发布时间】:2018-01-22 22:22:01
【问题描述】:
为什么我在发送标志 -h 或 -H 时会出现分段错误。
bool parse_command(int argc, char **argv, bool *header, char **fileName)
{
if (!argv)
return false;
bool *flagh = false;
bool *flagH = false;
char *options = "Hh";
int opt = 0;
while ( (opt = getopt(argc, argv, options ) ) != -1)
{
printf("HELLO");
switch (opt)
{
case 'h':
*flagh = true;
break;
case 'H':
*flagH = true;
break;
default:
usage_p1();
return false;
}
}
printf("%d", opt);
// Implement this function
return true;
}
【问题讨论】:
-
bool和true不是 C 中的关键字。您使用的是 C++ 编译器吗? -
flagh前面的星号表明它是一个指针 - 你没有分配。 -
这甚至不能编译,或者至少没有警告。 flagh 和 flagH 是指向布尔值的指针,但它们不指向任何东西。您在内存中没有任何实际的布尔值。然后将它们(指针)分配给“false”,这实际上使它们指向内存地址 0,因此是段错误。
-
您定义了两个指针变量,但您对它们的初始化并没有使它们指向有效位置。在我看来,这些变量应该不是指针。
-
@klutt 但是,它们在
stdbool.h中定义
标签: c segmentation-fault flags getopt