【问题标题】:C++ Classes, Pointers, Constructors, Segmentation Faults, 2D arraysC++ 类、指针、构造函数、分段错误、二维数组
【发布时间】:2021-07-09 17:20:33
【问题描述】:

.h 文件

public:
Class(int x, int y); //constructor for this question

private:
char (*1dArrayObjectPtr)[size] = nullptr;
char nameof2dArray[notImportantX][size];

初始化Class (*1dArrayObjectPtr)[size] = nullptr;然后赋值有什么区别:

cpp 文件

Class::Class(int x, int y) : x(x), y(y) {1dArrayObjectPtr = nameOf2dArray;};

或:

Class::Class(int x, int y) : x(x), y(y), 1DArrayObjectPtr(nameof2dArray) {};

为什么当我访问时顶部选项会导致分段错误而底部不会导致分段错误:

*(*(1DArrayObjectPtr+i)+j) 要么 1DArrayObject[i][j]

如果我将1DArrayObjectPtr 传递给一个新类,我是否可以迭代它?:

newClass::newClass(char* 1DArrayObjectPtr) : newClassPtr(1DArrayObjectPtr) {};

迭代为*(*(newClassPtr+i)+j)newClassPtr[i][j]

还是我将 1dpointer 从 2D 数组更改为其他东西而没有意识到?

【问题讨论】:

  • 感谢 MikeCAT 格式帮助!
  • 1dArrayObjectPtr 绝对不是 C++ 中的有效标识符。 (这不会崩溃 -> 这无法运行 -> 这不会编译。)
  • 我知道。它的意思是指某种东西而不是字面名称。
  • 这是一道概念题
  • 我做了一个minimal reproducible example。构造函数中成员的初始化和成员的赋值实际上没有区别(关于构造后的结果):Demo on coliru也许,我把你的问题弄错了......

标签: c++ class pointers header-files class-constructors


【解决方案1】:

Scheff 在语义上已经确认,没有区别。我将查看基类的构造函数,看看它们是否是罪魁祸首。谢谢谢夫。我试图将您的评论标记为解决方案,但我可能错误地标记了它....:D

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多