所以我试图使用“指针+ 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?或者我的解释是不是很明显?
答案 0 :(得分:2)
您似乎将链接列表的概念与数组的概念混合在一起。在传统的链表中,每个元素在堆上单独分配,并且没有理由将分配在内存中连续。这就是为什么你有一个.myimg {
position: absolute;
width: 180px;
right: 50px;
top: 100px;
}
指针来告诉你下一个元素在哪里。
当您使用表达式next
时,您正在访问beg + 1
后{1}}内存为struct item
的内存位置,这不一定是有效内存。在您的情况下,您会收到错误,因为您可能无权读取该内存。
答案 1 :(得分:0)
你不能在这里做(指针+ 1),因为beg
指针旁边的位置不一定在你的列表中。除非您使用过数组或类似的内容,否则内存不会按连续顺序分配。
你可以做的是
tempNext=beg->next;