类中结构中的Const * char语言 - 分割错误
const * char in struct in class - segmentation fault
我有这个代码,它给了我分割错误。
struct TRecord {
const char * Id;
const char * Name;
};
class CClass {
CClass ();
~CClass ();
bool Add ( const char * id, const char * name);
TRecord ** m_record;
int m_count;
};
CClass::CClass (void) {
m_count = 0;
m_record = new TRecord * [1000];
}
CClass::~CClass(void) {
for(int i=0;i<m_count;i++){
delete m_record[i];
}
delete [] m_record;
}
bool CClass::Add (const char * id, const char * name) {
m_record[m_count] -> Id = new char[11];
m_record[m_count] -> Name = new char[strlen(name) + 1];
m_record[m_count] -> Id = id;
m_record[m_count] -> Name = name;
m_count++;
return true;
}
如果我添加例如const char haha[2222];构造TRecord,它工作。我不明白为什么。你能帮我吗?
注:
将这行添加到您的Add
函数声明的顶部,它将解决您的Segmentation Fault
问题。
m_record[m_count] = new TRecord;
但是正如您在回答和注释中看到的那样,您的代码有许多问题。最重要的问题是,您没有为垃圾对象制定任何好的计划。所以你的代码有内存泄漏
一个错误是您没有在您的注册类中遵循三规则。这通常会导致段错误。
另一个错误是你没有初始化你的m_record[i]指针。因此析构函数可以对垃圾值调用delete[]。第三个错误是您在
相关文章:
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- 尝试用另一种语言解密时 AES 解密错误
- CMake 错误:无法确定目标的链接语言
- C ,vs 2015,致命错误:重复资源.类型:清单,名称:1,语言:0x0409
- vtkArrayCalculator语言 - 访问输出时出现分段错误
- 将提升 (ASIO) 错误消息转换为自然语言
- 使用我自己的 C++/CLI DLL 的 C#:错误:语言不支持'mytrainOp'
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 声纳库贝分析在 Eclipse 中失败,由于找不到异常语言"cpp"在本地分析中抛出错误
- 覆盖错误..宽松..C++可能违反语言规范
- OpenGL 着色器语言初始化错误无法从 GLChar 转换为 const
- GCC 编译器上布尔类型的 C 和C++语言的默认初始值设定项是 64 而不是 0。这是编译器错误?
- 在 C 语言中的大型数组上使用 realloc 的分段错误
- 托管语言如何确保没有段错误
- 在窗口标题和消息框中显示错误的语言:win32应用程序,opengl
- 在自由函数中定义的类型,可通过自动外部访问.语言错误或功能
- Github错误地识别了项目中使用的编程语言
- r语言 - cppp错误中的函数
- 编译器问题或c语言代码块中的一些错误
- std::vector语言 - 错误:无法删除不是指针的对象