C ++使用指针+ 1访问结构的值

时间:2017-05-17 21:09:37

标签: c++ pointers struct

所以我试图使用“指针+ 1”访问结构的值,但它给了我这个错误“[main] listTest 8320 cygwin_exception :: open_stackdumpfile:转储堆栈跟踪t o listTest.exe.stackdump“。如果我只使用一个没有”+1“的指针来访问它的工作值。当我打印出两个指针时,我得到的地址但是就像我说我无法访问的值(指针) +1)。

这是我目前的代码:

#include <iostream>
using namespace std;

struct item
{
    string value;
    struct item *next;
    struct item *before;
};

int main()
{
    item *beg, *end, *temp, *tempBefore, *tempNext;

    temp = new (item);
    temp->value = "Hello";
    temp->next = NULL;
    temp->before = NULL;
    beg = temp;
    end = temp;

    // add to the end of list
    temp = new (item);
    temp->value = "World";
    temp->next = NULL;
    temp->before = end;
    end->next = temp;
    end = temp;

    // add to the beginning of list
    temp = new(item);
    temp->value = "Reiska";
    temp->next = beg;
    temp->before = NULL;
    beg->before = temp;
    beg = temp;

    // add to the middle of list (between first and second)
    tempBefore = beg;
    tempNext = beg + 1;
    cout << tempNext << " " << tempBefore << endl; // prints both addresses
    cout << tempNext->value << " " << tempBefore->value << endl; // the error i mentioned earlier
    temp = new(item);
    temp->value = "Kiulu";
    temp->before = tempBefore;
    temp->next = tempNext;
    tempBefore->next = temp;
    tempNext->before = temp;

感谢所有的-reps。我肯定错了链接列表的概念,但这就是为什么u -rep?或者我的解释是不是很明显?

2 个答案:

答案 0 :(得分:2)

您似乎将链接列表的概念与数组的概念混合在一起。在传统的链表中,每个元素在堆上单独分配,并且没有理由将分配在内存中连续。这就是为什么你有一个.myimg { position: absolute; width: 180px; right: 50px; top: 100px; } 指针来告诉你下一个元素在哪里。

当您使用表达式next时,您正在访问beg + 1后{1}}内存为struct item的内存位置,这不一定是有效内存。在您的情况下,您会收到错误,因为您可能无权读取该内存。

答案 1 :(得分:0)

你不能在这里做(指针+ 1),因为beg指针旁边的位置不一定在你的列表中。除非您使用过数组或类似的内容,否则内存不会按连续顺序分配。

你可以做的是

tempNext=beg->next;