【发布时间】:2014-02-12 18:07:43
【问题描述】:
以下代码出现分段错误。有人可以解释为什么吗?我希望能够将 argv 的内容复制到一个新数组中,我称之为 rArray。
#include <iostream>
using namespace std;
int main( int argc, char **argv)
{
char **rArray;
int numRows = argc;
cout << "You have " << argc << " arguments:" << endl << endl;
cout << "ARGV ARRAY" << endl;
for (int i = 0; i < argc; i++)
{
cout << argv[i] << endl;
}
cout << endl << endl << "COPIED ARRAY" << endl;
for(int i; i < numRows; i++)
{
for (int j = 0; j < argc; j++)
{
rArray[i][j] = argv[i][j];
}
}
for (int i = 0; i < argc; i++)
{
cout << "Copied array at index " << i << "is equal to " << rArray[i] << endl;;
}
cin.get();
}
程序输出:
/a.out hello world
You have 3 arguments:
ARGV ARRAY
./a.out
hello
world
COPIED ARRAY
Segmentation fault: 11
为什么会出现此错误?我该如何解决?
编辑:我得到了修复,将 char **rArray 更改为 string rArray,并从那里动态分配大小。
【问题讨论】:
-
char** rArray没有为你分配任何内存,j < argc不是正确的条件。 -
@minitech 从技术上讲,
char** rArray;确实分配了堆栈空间(足以容纳一个指针)。 -
@FrerichRaabe:是的,因为那个我“完全”拿出了 =P
标签: c++ segmentation-fault argv