将指针声明为类成员C ++

时间:2015-02-11 15:53:34

标签: c++ pointers visual-c++

我试图编写一个C ++类,其中有一些指向int的指针作为私有成员。 尝试为指针地址赋值时,我收到此异常:

Unhandled exception at 0x000B140A in test.exe: 0xC0000005: Access violation      writing location 0x00000000.

以下是在我的机器上重现问题的最小代码量

#include "stdafx.h"

class Chunker {
  public:
    Chunker(int cx, int cy);

  private:
    int chunkSizeX, chunkSizeY;
    int *yOff, *xOff;
  };

Chunker::Chunker(int cx, int cy){
  chunkSizeX = cx;
  chunkSizeY = cy;
  *xOff = 0;
  *yOff = 0;
}; 

int main(int argc, char *argv)
{
  Chunker chunker(12, 12);
  return 0;
}

我无法弄清楚这里有什么问题?

2 个答案:

答案 0 :(得分:7)

你需要在某处为你的指针声明内存

Chunker::Chunker(int cx, int cy)
  :  chunkSizeX{cx}, 
     chunkSizeY{cy}
{
    xOff = new int(0);
    yOff = new int(0);
}

否则,您正在为尚未拥有地址的指针赋值。

显然,如果你的类是分配内存的那个,你也需要清理它

Chunker::~Chunker()
{
    delete xOff;
    delete yOff;
}

如果您的班级是分配内存的班级,您也可以考虑让成员为

std::unique_ptr<int> xOff;
std::unique_ptr<int> yOff;

答案 1 :(得分:2)

@ Cuber回复的替代方法是将*xOff = 0;替换为xOff = nullptr;(不含*)。但为什么指针?

Chunker::Chunker(int cx, int cy)
  :  chunkSizeX{cx}, 
     chunkSizeY{cy}
{
    xOff = nullptr;
    yOff = nullptr;
}

...

Chunker::~Chunker()
{
    delete xOff;
    delete yOff;
}