gpt4 book ai didi

c++ - 在类中使用指针作为私有(private)指针来访问 C++ 中的数组

转载 作者:行者123 更新时间:2023-11-30 02:39:56 26 4
gpt4 key购买 nike

我正在使用一个 int 指针作为私有(private)指针来访问一个数组。当我为存储和获取数组值编写单独的函数时,程序崩溃了。但是如果我在构造函数中编写获取值和存储值的代码,程序就可以正常工作。我找不到问题出在哪里。

程序 1:(不起作用)

#include<iostream>

using namespace std;

class NewArray{
private:
int Size = 0;
int *arrAddr = NULL;

public:
NewArray(int);
void SetValue(int);
void GetValueOf(int);
};

//Array is created
NewArray::NewArray(int arSz){
int arr[arSz];
Size = arSz;
arrAddr = arr;
cout << "An array of Size " << Size << " is created" << endl;
}

// Store Value function
void NewArray::SetValue(int index)
{
cin >> *(arrAddr+(index));
}

//Get value function
void NewArray::GetValueOf(int idx)
{
if ((idx >= Size) || (idx < 0))
{
cout << "index value is out of bound" << endl;
}
else
{
cout << *(arrAddr+idx) << endl;
}
}

int main()
{
int arrSize, arrIdx;

cout << "enter the size of array" << endl;
cin >> arrSize;

if (arrSize > 0)
{
NewArray ar(arrSize);

cout << "enter " << arrSize << " values. Enter the values one after the other." << endl;
for (int i = 0; i < arrSize; i++)
{
ar.SetValue(i);
ar.GetValueOf(i);
}

cout << "enter the index to fetch the value" << endl;
cin >> arrIdx;
ar.GetValueOf(arrIdx);
}
else{
cout << "invalid input" << endl;
}
return 0;
}

程序 2:(正在运行的代码)

#include<iostream>

using namespace std;
// size is passed

class NewArray{
private:
int Size;
int *arrAddr;

public:
NewArray(int);
void GetValueOf(int);
};

NewArray::NewArray(int arSz){
int arr[arSz];
int idx;
Size = arSz;
arrAddr = arr;
cout << "An array of Size " << Size << " is created" << endl;

// Storing values in array
cout << "enter " << Size << " values. Enter the values one after the other." << endl;
for (int i = 0; i < Size; i++)
{
cin >> *(arrAddr+i);
}

// To get the value from the index
cout << "enter the index to fetch the value" << endl;
cin >> idx;

if ((idx >= Size) || (idx < 0))
{
cout << "index value is out of bound" << endl;
}
else
{
cout << "The value is " << *(arrAddr+idx) << endl;
}
}


int main()
{
int arrSize, arrIdx;

cout << "enter the size of array" << endl;
cin >> arrSize;

if (arrSize > 0)
{
NewArray ar(arrSize);
}

else{
cout << "invalid input" << endl;
}

return 0;
}

我已针对这个特定示例进行了尝试,程序 1 在数组大小为 10 且我尝试写入第 7 个索引时崩溃。

谁能帮我找出原因?

最佳答案

在构造函数 NewArray::NewArray() 中,您创建一个数组,该数组存储在堆栈中。离开构造函数后,它的生命周期结束,它会从堆栈中删除,因此通过指针 arrAddr 访问它是未定义的行为。

要简单地解决问题,您需要使用 newdelete 在堆上分配数组或将其存储为类成员。

这只是两种实现方式。我推荐任何东西,它们只是可能性

关于c++ - 在类中使用指针作为私有(private)指针来访问 C++ 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407395/

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