Ошибка C++: write access violation **_Str** was 0xccccccc

219
26 декабря 2017, 17:23

Почему этот код:

struct books {
    char* autor;
    char* title;
};
int main(){
    books katalog[10];
    std::cin >> katalog[0].autor;
    std::cout<< katalog[0].autor << std::endl;
    ...
}

Вызывает следующую ошибку?

An exception was thrown: write access violation **_Str** was 0xccccccc.

Answer 1

У Вас структура, в которой два поля указатели на массив символов. Но память под них не выделяется. Поэтому и происходит вышеуказанная ошибка.

Самый простой, правильный и надежный способ это исправить, это использовать тип std::string.

struct books {
std::string autor;
std::string title;
}

Использовать char* нужно только если это пишется для поддержки и си кода (маловероятно), либо так очень сильно захотел преподаватель.

Answer 2

Вы пытаетесь вводить и выводить адрес обьекта под которого Вы не выделяли память. Вместо указателей можете хранить char[] с каким то размером, который можете задать как аргумент шаблона. Пример:

#include <iostream>
template < size_t n  > 
struct books  {
   static const unsigned k = n;
   char autor[k];
   char title[k];
};
int main()
{
   books<2> katalog[10];
   std::cin >> katalog[0].autor;
   std::cout<< katalog[0].autor << std::endl;
   // для проверки посмотрим на размер books::autor
   std::cout    << sizeof(books<2>::autor);      
   return 0;
}

Да, чуть не забыл - в вашем примере наверное есть смысль вводить элементы autor, а не autor

for (size_t i = 0; i < sizeof(books<2>::autor); ++i)
     std::cin >> katalog[0].autor[i];
READ ALSO
Нахождение слов, у которых есть удвоение букв [требует правки]

Нахождение слов, у которых есть удвоение букв [требует правки]

ввести предложения и вывести на экран те его слова, в которых удвоение букв, или вывести сообщение об отсутствии таких словНельзя использовать...

185
Как найти нужную строку в C++?

Как найти нужную строку в C++?

К примеру, есть файл lantxt

191
Помогите сделать прогу на тему Шаблоны функций,очень нужно для зачёта [требует правки]

Помогите сделать прогу на тему Шаблоны функций,очень нужно для зачёта [требует правки]

Заданный массив с n чиселПоменять местами последний элемент с первым элементом, равным x

189