2015-02-11 157 views
1

我正在尝试编写一个C++类,其中有一些指向int的指针作为私有成员。 我在尝试时的值赋给指针地址此异常:将指针声明为类成员C++

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

你在下面有一个很好的答案,但你为什么在这里首先使用指针? – Quentin 2015-02-11 16:00:01

+0

指针是因为在完整的代码中有一个函数,每次调用都会返回数组的下一个'块'。 xOff和yOff指针将指向正在跟踪它在数组中的位置的整数。 – jramm 2015-02-11 16:04:53

+2

那么xOff和yOff是一些数组的索引器?您可以将它们定义为整数,并将它们用作'myXArray [xOffset]' – tofi9 2015-02-11 16:11:48

回答

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; 
+0

非常感谢。与C.有点不同 – jramm 2015-02-11 16:05:33

2

替代@ Cuber的答复是xOff = nullptr;更换*xOff = 0;(不*)。但为什么指针?

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

... 

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