Copy argv into new array
argv, c++, segmentation-fault
Solution
You need to allocate memory for `rArray` and also need to initialise the outer loop counter `i`.
Since the contents of `argv` are constant strings, you could just copy pointers to them
rArray = new char*[argc+1];
for(int i=0; i <= argc; i++) {
rArray[i] = argv[i];
}
// use rArray
delete [] rArray;
Note that `argv[argc]` is guaranteed to be `NULL`. I've updated the loop to copy this as well (hence the unusual looking `i<=argc` exit condition)
If you really want to copy the content of the strings (as minitech suggests), the code becomes a bit more complicated:
rArray = new char*[argc+1];
for(int i=0; i < argc; i++) {
int len = strlen(argv[i]) + 1;
rArray[i] = new char[len];
strcpy(rArray[i], argv[i]);
}
rArray[argc] = NULL;
// use rArray
for(int i=0; i < argc; i++) {
delete [] rArray[i];
}
delete [] rArray;
Problem
I'm getting a segmentation fault for the following code. Can somebody explain why? I would like to be able to copy the contents of argv into a new array, which I called 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(); } ``` The program outputs : ``` /a.out hello world You have 3 arguments: ARGV ARRAY ./a.out hello world COPIED ARRAY Segmentation fault: 11 ``` Why am I getting this error? How do I fix it? EDIT: I got a fix, changing the `char **rArray` to `string rArray`, and dynamically allocating the size from there.