【发布时间】:2020-10-02 19:04:38
【问题描述】:
我是 C++ 的新手,我正在制作一个简单的程序,它将值和单位作为系统参数,并将它们全部转换为单个单位。命令行执行和输入是这样的:
./unit_conv 3 feet 5 inches centimeters
数值和单位之间用空格隔开,最后一个参数是我要转换成的单位。
我获取输入的方法是在最后一个元素之前将 *argv[] 的所有偶数元素添加到名为“values”的整数数组中,并将所有奇数元素添加到名为“units”的字符指针数组中。以下是我尝试的实现:
if (argc % 2 == 0) {
char * desiredUnit = argv[argc - 1];
int values[argc];
char * units[argc];
int j;
int k;
for (int i = 1; i < argc; i++) {
if (i % 2 == 1) {
values[j] = atoi(argv[i]);
j++;
}
else {
units[k] = argv[i];
k++
}
}
}
在我上面提到的执行后,我得到以下信息:
Segmentation fault (core dumped)
我知道我的 for 循环中发生了段错误。不过,我看不到该程序如何尝试访问受限内存。我已经被这个卡住了很长一段时间了。
希望我提供了足够的信息,但如果我的问题过于模糊,请告诉我。
谢谢!
【问题讨论】:
-
你没有初始化
j和k。根据 C 实现,它们可能是零或完全随机的值。 -
假设它们是不确定的。如果将它们设置为 0,则不是为了编码员的方便,而是为了隐私。
-
你试过调试吗?请注意,可变长度数组不是标准 C++,您应该使用
std::vector代替 -
现在工作!对我来说这是多么世俗的错误。我认为变量默认初始化为零。
-
不,在编译时大小未知的地方也应该使用向量,VLA 是非标准的,很容易导致堆栈溢出,向量通过堆分配来帮助防止它们
标签: c++ c arrays segmentation-fault