我试图弄清楚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
输出:
0xe00eb0 0xe00ec8 0xe013a8
答案 0 :(得分:2)
该标准不能为您分配的内存位置提供任何保证。 new
可以为您提供彼此相邻的位置,但也可以在完全随机的基础上为您提供位置。您最终要得到什么具体取决于
new
用于分配的算法 那为什么为什么会发生这种情况?总的来说,连续分配最终会紧密靠近是有意义的,因为这减少了缓存未命中的机会,但是new
没有这样做的义务。实际上,由于new
有时需要从操作系统请求内存,并且因为new
必须使用一点内存来跟踪分配的内容,因此无法保证所有分配均定期进行。