将char数组分配给字符串数组指针会导致分段错误

时间:2015-11-05 19:41:46

标签: c++

我使用了一个包含字符串的指针数组。

int numwords = 0;
int capacity = 0;
string* words = new string[capacity];
char line[10];

...

resize(){
    capacity = capacity*2 +1;
    string* temp = new string[capacity];
    for(int i = 0; i < numwords; i++){
            temp[i] = words[i];
    }
    delete [] words;
    words = temp;
}

...

words[numwords] = string(line);
numwords++;

当它到达这个部分时,就会出现段错误。 numwords 始终为0。 Numwords仅在while循环结束时递增。

直到运行时才会出现错误,所以我非常确定我正确地使指针数组。

我确实在其他地方找到了类似问题的答案。

string strVal[3] = {"Good","Better","Best"};
string* strPtr = strVal;

但我仍然不知道我可能会做什么或者做得不对。

1 个答案:

答案 0 :(得分:3)

如果我理解的话,执行内容的简化版本如下:

int numwords = 0;
int capacity = 0;
string* words = new string[capacity];

words[numwords] = string(line);

所以在这里,显然,你在做:

string *words = new string[0];
words[0] = string(line);

你试图将1个元素放在大小为0的数组中。这是正常的,它不起作用。大小为n的数组可以包含从0n-1索引的n个元素。在您的情况下,n为0,您不能在数组中放置任何元素。