在C++中使用指向一系列整数的指针
using Pointers to a series of integers in C++
我正在尝试创建一个 c++ 程序,其中包含一个在"堆"上保存整数并且只有一个方法 pop((,它返回类中的第一项并将其删除。这是我到目前为止的代码:
#include <iostream>
using namespace std;
class LinkList {
int *values; //pointer to integers stored in linklist
int number; // number of values stored in linklist
public:
LinkList(const int*, int); // Constructor (method declaration)
int pop(); // typically remove item from data structure (method declaration)
};
LinkList::LinkList(const int *v, int n){
number = n;
*values = *v;
int mypointer = 1;
while (mypointer<n) {
*(values+mypointer) = *(v+mypointer);
mypointer++;
}
}
int LinkList::pop() {
if (number>0) {
int returnme = *values; //get the first integer in the linklist
number--;
values++; //move values to next address
return returnme;
}
else {return -1;}
}
int main() {
int test[] = {1,2,3,4,5};
LinkList l1(test,5);
cout << l1.pop() << endl;
LinkList l2(test,5);
cout << l2.pop() << endl;
return 0;
}
问题是它在 *values = *v 行处失败,如果我从 main 方法中删除第 4 行和第 5 行,我不再遇到这个问题,所以它变成了内存管理的事情。
我想做的是让值指向带有整数的连续内存位。我尝试为此使用数组,但一直只获取 pop(( 返回的随机内存地址
背景:正常的我用java编程,我只使用C/C++2个月,我在ubuntu中使用eclipse IDE,我可以非常基本地使用调试器,但目前我在eclipse中没有功能滚动条,所以如果它们不适合我的屏幕,我就不能做点什么。
您正在取消引用未初始化的指针 ( values
( 在第 *values = *v;
行,这是未定义的行为 (UB(。 这一行所说的是"获取values
指向的整数,并为其分配v
指向的值"。这种逻辑的问题在于values
还没有指向任何东西。此 UB 的结果是您收到的崩溃。
此代码还有许多其他问题,例如将const int*
传递给构造函数以修改这些值。最大的问题是这不是一个实际的链表。
*values = *v;
在初始化此行中的values
指针之前,取消引用它。这就是后来错误的源头,main
前三行的非错误只是运气好。您必须通过values = new int[n]
分配空间,并通过delete[] values
在析构函数中释放空间。 std::vector
以干净且异常安全的方式为您完成这项工作。
也许问题是你正在增加一个整数 - mypointer,而不是一个指针。如果整数需要多个字节的空间,则可能会导致错误。你能尝试声明一个指针并增加它吗?
values
成员变量是指向未初始化内存的指针。在开始将数字复制到其中之前,您必须将其指向有效内存。例如:
LinkList::LinkList(const int *v, int n){
number = n;
values = new int[n]; // allocate memory
int mypointer = 0;
while (mypointer<n) {
*(values+mypointer) = *(v+mypointer);
mypointer++;
}
}
LinkList::~LinkList() {
delete values; // release memory
}
另外,为什么你称之为链表,而实际上你正在使用内存数组来存储你的数字?
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 将一系列整数放入类的最佳方法是什么?
- 输入验证以筛选出字符、字符串和一系列整数
- 垃圾价值通过,同时总结一系列长整数
- 我可以使用STD ::复制将数据的位模式从整数向量复制到一系列未签名的字符
- 从一系列整数中搜索
- 我怎样才能同时将一系列字符值读取为字符和整数并进行比较
- 将一系列整数写入全局内存的快速(est)方法
- 如何有效地将一系列连续整数插入std::集中
- 给定一系列整数,提供第k个最大数
- 在C++中使用指向一系列整数的指针
- 如何将字符串转换为一系列整数