以下代码引起了分段错误。请问有人能解释一下为什么吗?我想将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
也不是正确的条件。 - Ry-char** rArray;
确实分配了堆栈空间(足以容纳一个指针)。 - Frerich Raabe