我正在尝试使用sys/time.h
我想我可以通过将struct timespec存储为Engine类的私有成员来实现此目的,但是这会在代码的完全不相关的部分中引起EXEC_BAD_ACCESS。
奇怪的是,我可以在不引起崩溃的情况下在其位置添加私有int,long和void *参数。
以下是相关部分。
class Engine {
private:
static Engine* instance;
Engine();
struct timespec last;
public:
static Engine* shared() {
if (!instance) {
instance = new Engine();
}
return instance;
}
Engine(const Engine&) = delete;
// EntityManager
EntityManager entityManager;
bool setCount(int num);
};
是的,这是分配给堆的信号量。这样做是有很重要的原因的。
仅添加最后一个会在其初始化代码内部的EntityManager方法中导致EXEC_BAD_ACCESS,它会分配大量内存,然后分配每个调用其defalut构造函数的对象,如下所示:
for (int i = activeCount; i < realCount; i++) {
char* entityStart = pool + sizeof(Entity) * i;
new(entityStart) Entity(i+1);
}
EXEC_BAD_ACCESS显示为位于我创建的默认Entity类的第一行。第一行只是设置实体的属性。
这对我来说很混乱,尤其是因为可以添加struct timespec以外的其他类型而没有问题。所以我想知道是什么原因造成的。你有什么想法?这可能是某种编译器问题吗?
答案 0 :(得分:0)
好的,所以我最终解决了这个问题,它可能不仅仅是其他事情。如果您遇到此问题,请检查以下内容:
祝你好运!