gpt4 book ai didi

c++ - 链表地址不是固定的

转载 作者:行者123 更新时间:2023-11-28 01:21:22 25 4
gpt4 key购买 nike

我试图弄清楚 newNode 地址如何改变 appendNode 的每次迭代。当我将地址从十六进制转换为十进制时,我得到值 14683824、14683848、14685096。虽然前两个地址似乎增加了 24,但第三个地址增加了 1248。我不明白为什么会这样。

//Main Program
#include <iostream>
#include "numberList.h"

using namespace std;

int main()
{
numberList list;

list.appendNode(2.5);
list.appendNode(3.4);
list.appendNode(5.6);


// list.displayList();


return 0;
}

//append.cpp
#include <iostream>
#include "numberList.h"

using namespace std;

void numberList ::appendNode(double num)
{
listNode *newNode;
listNode *nodePtr;

newNode = new listNode;
newNode->value = num;
newNode->next = nullptr;

cout << newNode << endl; //The addresses of the newNode dont have even
intervals

if(!head)
{
head = newNode;
}
else
{
nodePtr = head;

while(nodePtr->next)
{
nodePtr = nodePtr->next;

}
}

}

//numberList.h
#ifndef APPENDNODE_NUMBERLIST_H
#define APPENDNODE_NUMBERLIST_H

class numberList
{
private:
struct listNode
{
double value;
struct listNode *next;
};

listNode *head;

public:
numberList()
{
head = nullptr;
}
//~numberList();
void appendNode(double);
void displayList() const;
void insertNode(double);
void deleteNode(double);

};
#endif //APPENDNODE_NUMBERLIST_H

输出:

0xe00eb00xe00ec80xe013a8

最佳答案

该标准不对您分配的内存位置提供任何保证。 new 可以为您提供彼此相邻的位置,但也允许它以完全随机的方式为您提供位置。具体你最终得到什么取决于

  • new用于分配的算法
  • 以前的分配模式

那么为什么这次会发生这种情况?一般来说,连续分配结束时靠近在一起是有意义的,因为这减少了缓存未命中的可能性,但是 没有义务这样做。事实上,因为 new 偶尔需要从操作系统请求内存,并且因为 new 必须使用一些内存来跟踪分配的内容,无法保证所有分配都会定期进行。

关于c++ - 链表地址不是固定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com