【发布时间】:2015-07-15 04:37:19
【问题描述】:
我正在尝试为 amd64arch 构建它,但它一直给我分段错误:
#include "client.h"
namespace {
class SimpleClientImpl : public SimpleClient {
private:
int progress_counter_;
public:
SimpleClientImpl() : progress_counter_(0) {}
int GetProgress() const;
char* CutPrefix(char* data);
};
int SimpleClientImpl::GetProgress() const {
return progress_counter_;
}
char* SimpleClientImpl::CutPrefix(char* data) {
progress_counter_++;
return data + *reinterpret_cast<size_t*>(data) + sizeof(size_t);
}
} // namespace
std::shared_ptr<SimpleClient> CreateSimpleClient() {
return std::shared_ptr<SimpleClient>(new SimpleClientImpl);
}
在client.h中我得到了:
#ifndef TEST_CLIENT_H_
#define TEST_CLIENT_H_
#include <memory>
class SimpleClient {
public:
virtual int GetProgress() const = 0;
virtual char* CutPrefix(char* data) = 0;
virtual ~SimpleClient() {}
};
std::shared_ptr<SimpleClient> CreateSimpleClient();
#endif
知道如何解决这个问题吗?我不确定为什么它会给我一个分段错误,我已经尝试以管理员身份运行它,但我真的不知道问题出在哪里。
【问题讨论】:
-
通过调试器运行它时看到了什么?
-
这
reinterpret_cast有味道。 -
没有完整的程序很难说,但是指针算法看起来很可疑(并且有点未定义)。它的目的是什么?您的意见是什么?
-
由于程序坏了,我们无法通过阅读它来确定它应该做什么。 因为它不做那件事。解释你的目标。
-
"我已经尝试以管理员身份运行它" - 如果您的程序有未定义的行为,这是您最不想尝试的事情。