我有一个名为record的结构,其中包含键值对:
struct Record{
char* key=new char();
TYPE value=NULL;
Record(){
key = "default";
value = 10;
}
Record(const char* key_, TYPE value_){
strcpy(key, key_);
value = value_;
}
const Record<TYPE>& operator=(const Record<TYPE>& other){
key = other.key;
value = other.value;
return *this;
}
};
另外,我有一个课程&#34; SimpleTable&#34;其中包含这些记录的数组:
class SimpleTable:public Table<TYPE>{
struct Record<TYPE> *table;
public:
当我尝试将日期放在这些记录中时出现问题。我的strcpy给了我&#34;访问违规写入位置&#34;。 (在类构造函数中初始化的Records数组的所有元素):
template <class TYPE>
bool SimpleTable<TYPE>::update(const char* key, const TYPE& value){
for (int i = 0; i < 10; i++){
if (table[i].key == ""){
strcpy(table[i].key , key); // <-------- crash right here
table[i].value = value;
}
}
return true;
}
答案 0 :(得分:1)
char* key=new char();
仅分配内存以容纳一个字符。
strcpy(table[i].key , key);
除非key
为空字符串,否则将导致未定义的行为。
使用std::string key
。如果您不允许使用std::string
,则必须重新访问代码并修复与key
相关的内存问题。