使用一系列指针时,程序“已停止工作”

时间:2013-02-14 23:57:49

标签: c++ arrays string pointers

我试图创建一个字符串数组,并将它们与链接列表连接起来。问题是我们只能使用数组。教练说我们不能使用模板,矢量等。这些是我发现能够做到这一点的唯一方法。我不认为这甚至是一个链表,他希望我们的数组能够在并行处理而不是指向下一个元素。

#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string names [4] = {"Dick", "Harry", "Sam", "Tom"};
    string *nameptr[4];

    for(int x = 0; x < 4; x++)
    {
        *nameptr[x] = names[x];
        cout << nameptr[x] << "  ";
        cout << &nameptr[x] << endl;
    }
}

这段代码有什么问题?我错过了什么?

我迷失了,如果有人能对此有所了解,那就太棒了。

2 个答案:

答案 0 :(得分:4)

你的问题不是&#39;清除,但要使代码运行。

尝试更新

*nameptr[x] = names[x];

nameptr[x] = &names[x];

答案 1 :(得分:3)

string names[4] = {"Dick", "Harry", "Sam", "Tom"};std::string个对象的数组。 string *nameptr[4];是指向std::string个对象的指针数组。

要初始化指针,您需要指定它指向它的地址:nameptr[x] = &names[x];

当您想要访问指针指向的内存时,使用

Dereference operator*)。例如,打印nameptr[x]指向的字符串:std::cout << *nameptr[x];


解释为什么你的程序“已经停止工作”:你已经声明了string *nameptr[4];,即指针数组,但你没有初始化它。然后在循环中,您尝试执行*nameptr[x] = names[x];,这意味着“获取names[x]对象并替换nameptr[x]指向它的对象”。您正在取消引用尚未初始化的指针,这会导致未定义的行为