【问题标题】:Declaration of a private array accessed by pointer in a class and memory allocation类中指针访问的私有数组的声明和内存分配
【发布时间】:2017-04-26 10:08:58
【问题描述】:

我需要一些关于指针的类内声明的帮助。尽管我使用 c++,但我正在寻找一种使用 c 样式数组的方法(所以不幸的是没有向量)。我无法在执行过程中没有错误,例如“分段错误:11”或“总线错误:10”。目的是有一种方法可以在一个类中包含 10 个对人员的引用。

这些指针在.h文件中是这样声明的:

private:
string * name;
string * surname;
int * index1;
int * index2;

在 .cc 文件的 ctor 中,我使用了不同的方式来分配内存,例如:

string * name = new string[10];
string * surname = new string[10];
int * index1 = new int[10];
int * index2 = new int[10];

但是我遇到了运行时错误,可能是因为它实际上没有访问私有变量或者它超出了内存(“分段错误”)。 如果我不写上面的行,执行时输出是“总线错误”。 我在编译中没有错误,只有在执行期间。 我无法更改 .h 文件中的私有变量类型,并且它不允许我在类中使用 new,因为它将是 C++11 的扩展。

任何帮助将不胜感激

【问题讨论】:

  • 那些是局部变量并且隐藏了你的对象实例成员。类型(string * 等)不应该存在于实际的 c-tor 中(可以说你应该首先使用 std::vector<>s 无论如何)。
  • 在你的 ctor 中,decalration 应该是 name = new string[10] 等等..
  • 感谢您的快速回复,但我也尝试过这种方式,但它返回运行时错误
  • 请提供minimal reproducible example,目前只能提供很少的帮助

标签: c++ arrays pointers runtime-error bus-error


【解决方案1】:

我认为你应该使用 std::vector,因为初学者几乎没有理由使用 new/delete。

在您的情况下,私人部分可能会更改为:

private:
std::vector<string> name;
std::vector<string> surname;
std::vector<int> index1;
std::vector<int> index2;

在构造函数中,可以有这个:

name.resize(10);
surname.resize(10);
index1.resize(10);
index2.resize(10);

【讨论】:

  • 更好的是,使用成员初始化列表并有一个空的构造函数主体
  • OP 实际上明确表示“没有向量”
  • @PasserBy OP 似乎是个新手,对我来说,给他们一个比 new/delete 更好的选择似乎更好
  • 即使是这样,基于vector 的答案也应该是对直接答案 imo 的补充
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 2011-02-24
  • 2015-12-10
  • 2021-11-15
  • 2011-04-23
  • 1970-01-01
  • 2011-04-29
  • 2011-11-30
相关资源
最近更新 更多