使用指向C++; 我试图用一个C++类程序来构造一个类,它在“堆”上拥有整数,并且只有一个方法,即POPLE(),它返回类中的第一个项并将其移除。这是我目前的代码: #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; } #包括 使用名称空间std; 类链接列表{ int*values;//指向链接列表中存储的整数的指针 int number;//链接列表中存储的值的数目 公众: 链接列表(常量int*,int);//构造函数(方法声明) int pop();//通常从数据结构中删除项(方法声明) }; 链接列表::链接列表(常量int*v,int n){ 数字=n; *数值=*v; int mypointer=1; while(mypointer0){ int returnme=*value;//获取链接列表中的第一个整数 数字--; values++;//将值移动到下一个地址 还给我; } else{return-1;} } int main(){ int测试[]={1,2,3,4,5}; 链接列表l1(测试,5); cout

使用指向C++; 我试图用一个C++类程序来构造一个类,它在“堆”上拥有整数,并且只有一个方法,即POPLE(),它返回类中的第一个项并将其移除。这是我目前的代码: #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; } #包括 使用名称空间std; 类链接列表{ int*values;//指向链接列表中存储的整数的指针 int number;//链接列表中存储的值的数目 公众: 链接列表(常量int*,int);//构造函数(方法声明) int pop();//通常从数据结构中删除项(方法声明) }; 链接列表::链接列表(常量int*v,int n){ 数字=n; *数值=*v; int mypointer=1; while(mypointer0){ int returnme=*value;//获取链接列表中的第一个整数 数字--; values++;//将值移动到下一个地址 还给我; } else{return-1;} } int main(){ int测试[]={1,2,3,4,5}; 链接列表l1(测试,5); cout,c++,list,pointers,C++,List,Pointers,可能问题在于您正在递增的是integer-mypointer,而不是指针。如果integer需要超过一个字节的空间,那么这可能会导致错误。您是否可以尝试声明一个指针并将其递增?可能问题在于您正在递增integer-mypointer,而不是a指针。如果整数需要多个字节的空间,那么这可能会导致错误。是否可以尝试声明一个指针并将其递增 *values = *v; 在初始化前,您取消引用此行中的值指针。这是后面错误的来源,而main的前三行中的非错误仅仅是由于运气。您必须通过values=new i

可能问题在于您正在递增的是integer-mypointer,而不是指针。如果integer需要超过一个字节的空间,那么这可能会导致错误。您是否可以尝试声明一个指针并将其递增?

可能问题在于您正在递增integer-mypointer,而不是a指针。如果整数需要多个字节的空间,那么这可能会导致错误。是否可以尝试声明一个指针并将其递增

*values = *v;
在初始化前,您取消引用此行中的
指针。这是后面错误的来源,而
main
的前三行中的非错误仅仅是由于运气。您必须通过
values=new int[n]
分配空间,并通过
delete[]在析构函数中取消分配空间values
std::vector
以干净且异常安全的方式为您执行此操作


在初始化前,您取消引用此行中的
指针。这是后面错误的来源,而
main
的前三行中的非错误仅仅是由于运气。您必须通过
values=new int[n]
分配空间,并通过
delete[]在析构函数中取消分配空间values
std::vector
以干净且异常安全的方式为您执行此操作。

您在
*values=*v;这是未定义行为(UB)行中取消引用未初始化指针(
values
)“获取
指向的整数,并将
v
指向的值赋给它。”此逻辑的问题是
尚未指向任何内容。此UB的结果是您收到的崩溃


此代码还有许多其他问题,例如将
常量int*
传递给构造函数以修改这些值。最大的问题是这不是实际的链表。

您正在取消对未初始化指针(
)的引用在
*values=*v;
这一行是未定义行为(UB)。这一行的意思是“获取
值所指向的整数,并将
v所指向的值赋给它。”“。此逻辑的问题是,
尚未指向任何内容。此UB的结果是您收到的崩溃


此代码还有许多其他问题,例如将
const int*
传递给构造函数以修改这些值。最大的问题是这不是实际的链表。

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
}
LinkList::LinkList(常量int*v,int n){
数字=n;
values=newint[n];//分配内存
int mypointer=0;

while(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
}
LinkList::LinkList(常量int*v,int n){
数字=n;
values=newint[n];//分配内存
int mypointer=0;

while(mypointer)技术上,const int指针中的值以后不会修改,而是复制到“LinkList”中的内部存储器中因此,这是正确的,只是尝试构建
std::vector
的两个迭代器构造函数,但其他错误您是对的。从技术上讲,const int指针中的值以后不会修改,而是复制到“LinkList”中的内部存储中这是正确的,只是试图建立<代码> STD::vector < /COD>两个迭代器构造函数,但是你对其他错误是正确的。它是一个C++课程的练习,它是C++教程中的一个练习。值
在知道数组长度时删除数组中的值?@Heidi:
删除[]值
在知道数组长度时如何删除数组中的值?@Heidi: