【发布时间】:2011-12-29 21:57:54
【问题描述】:
我遇到了 XOR 双链表的问题,它有一个必须包含节点的 NEXT 和 PREV 指针的指针。我必须对指针的地址进行异或运算,但我不能。 我可以分配一个与两个地址异或的内存地址,但我无法为其地址获取值(这有分段错误错误):
int main(){
int* ptr = new int;
int *ptr2 = new int;
ptr2 = (int*)((unsigned long)ptr ^ (unsigned long)ptr2);
*ptr2= 5; /here has segmentation fault
cout <<*ptr2;
return 0;
为什么这段代码有错误?我该如何解决?
感谢您的回复,但我无法转移我的想法,我换句话来说我的问题: 通常我们有一个指针,它通过“new”(在 c++ 中)关键字为其分配内存空间。这个为我们的指针保留的地址是由操作系统决定的,对吗? 例如,指针指向它的地址是 0x8f3400b(这是可以保留的可用内存) 我想通过不使用 new 关键字来手动执行此操作,如下代码:
int* ptr1 = (int*) 0x2355;
int* ptr2 = (int*) 0x23ff;
现在我不知道地址 0x2355 和 0x23ff 是否可以保留? 然后我决定“new”这些指针,然后对它们进行异或,如下所示:
int* ptr1 = new int //ptr1 is now manage by OS
int* ptr2 = new int //like ptr1 ...
然后我想对这些指针进行异或运算并创建一个新空间来附加一个节点,该节点是第三个节点,但我无法正确寻址它,但是当我想评估它时发生分段错误:
int* ptr1 = new int; // for example the address is X
int* ptr2 = new int; // for example the address is Y
int* ptr3 = (int*)((unsigned long)ptr1 ^ (unsigned long)ptr2); //the final address is X^Y
我该如何纠正这个问题? 我不知道如何使用 intptr_t 和其他请帮助我 谢谢
【问题讨论】:
-
这永远行不通。是什么促使你尝试它?
-
什么意思如何手动分配内存?
-
我假设您正在尝试这样做? en.wikipedia.org/wiki/XOR_linked_list
-
别笑了:有一个XOR linked list 这样的东西,它实际上涉及将指针异或在一起。这家伙可能正在尝试使用这样的列表。我希望我能理解他想说的话,这可能很有趣。如果是英文就好了。
-
@GregHewgill:即使那篇文章有
这种形式的链表可能是不可取的:
标签: c++