strcpy访问冲突写入结构变量

时间:2015-03-26 21:03:02

标签: c++ arrays string struct strcpy

我有一个名为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;
}

1 个答案:

答案 0 :(得分:1)

char* key=new char();

仅分配内存以容纳一个字符。

strcpy(table[i].key , key);
除非key为空字符串,否则

将导致未定义的行为。

使用std::string key。如果您不允许使用std::string,则必须重新访问代码并修复与key相关的内存问题。