将指针声明为 class 成员 C++
Declare pointer as class member C++
我正在尝试编写一个 C++ class,其中包含几个指向 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;
}
我只是想不通这里出了什么问题?
您需要在某处为您的指针声明内存
Chunker::Chunker(int cx, int cy)
: chunkSizeX{cx},
chunkSizeY{cy}
{
xOff = new int(0);
yOff = new int(0);
}
否则,您正在为还没有地址的指针赋值。
显然如果你的 class 是分配内存的那个,你也需要清理它
Chunker::~Chunker()
{
delete xOff;
delete yOff;
}
如果您的 class 是分配内存的那个,您可能还需要考虑让成员
std::unique_ptr<int> xOff;
std::unique_ptr<int> yOff;
@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;
}
我正在尝试编写一个 C++ class,其中包含几个指向 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;
}
我只是想不通这里出了什么问题?
您需要在某处为您的指针声明内存
Chunker::Chunker(int cx, int cy)
: chunkSizeX{cx},
chunkSizeY{cy}
{
xOff = new int(0);
yOff = new int(0);
}
否则,您正在为还没有地址的指针赋值。
显然如果你的 class 是分配内存的那个,你也需要清理它
Chunker::~Chunker()
{
delete xOff;
delete yOff;
}
如果您的 class 是分配内存的那个,您可能还需要考虑让成员
std::unique_ptr<int> xOff;
std::unique_ptr<int> yOff;
@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;
}