У меня есть структура называется записью, которая содержит ключ, значение пару:зЬгсра нарушение прав доступа написание переменной структуры
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;
}
};
Кроме того, у меня есть класс «SimpleTable», который содержит массив из этих записей:
class SimpleTable:public Table<TYPE>{
struct Record<TYPE> *table;
public:
Проблема возникает, когда я пытаюсь поместить дату в эти записи. Моя strcpy дает мне «место записи нарушения доступа». (Все элементы массива Отчетов инициализируется в конструкторе класса):
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;
}
'char * key = new char();' выделяет один символ. 'char * key = new char [10];' выделяет массив, который вам нужен. 'key = other.key;' в операторе присваивания также неверно. –
вы выделяете один символ, затем переходите к копированию всей строки поверх нее, что вы ожидали? –
Не зацикливайте идентификатор C, который на самом деле находится в нижнем регистре (ваш заголовок имел 'Strcpy', а не' strcpy', прежде чем я его отредактировал). Легко может быть и другая функция, называемая «Strcpy». –