0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
|
|||||||||||
1 | |||||||||||
Ошибка (access violation) при обращении к элементу динамического массива структур07.10.2015, 09:12. Показов 1321. Ответов 10
Метки нет (Все метки)
Добрый день! Все прекрасно работает если в структуре статические массивы. Но так уж получилось, что есть необходимость задавать размерность массивов вручную. Итак, есть некая структура с динамическим массивом, которую мы объявляем в одной из функций:
0
|
07.10.2015, 09:12 | |
Ответы с готовыми решениями:
10
Массивы структур (при обращении к элементу массива выскакивает ошибка) Access Violation при обращении к элементу массива Access Violation при повторном заполнении динамического массива Ошибка при обращении к элементу массива |
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
|
||||||
07.10.2015, 09:30 | 2 | |||||
А что тебе мешает обьявить сразу динамический массив в структуре
Добавлено через 3 минуты
0
|
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
|
|
07.10.2015, 09:49 [ТС] | 3 |
Я правильно понимаю, что это вместо 7 строки в моей первой вставке? Если да, то ругается cannot convert 'int*' to 'int'
0
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
||||||
07.10.2015, 09:53 | 4 | |||||
Jaydens_Blues, вы записываете в файл структуру, содержащую указатель (это просто адрес памяти в куче), сам массив, как лежал в куче, так там и будет лежать, пока эту память не отметят как неиспользуемую (что неминуемо произойдёт при завершении работы программы). Когда вы читаете структуру, то в ней находится адрес, по которому уже нет массива (при этом и куча скорее всего уже другая), разыменовывание (rec.Prog[i]) такого указателя и приводит к "access violation". Для записи структуры в файл используйте либо статический массив, либо как-то так:
0
|
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
|
|
07.10.2015, 10:01 [ТС] | 5 |
У меня наоборот, я считываю файл в структуру. Но, как я понимаю, это без разницы. Наверное, все же придется работать со статическими массивами, т.к. помимо этой одной ошибки почему-то файл читается как-то по-другому, не как со статическими. Это еще как-то и на размер структуры sizeof(rec) влияет, потому что файл будто дольше читается, чем положено и, возможно, некорректно
0
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
07.10.2015, 10:06 | 6 |
Jaydens_Blues, а пишет туда эти структуры кто? Если в структуре объявить статический массив, то он её размер станет больше ровно на sizeof("тип_эл_массив")*count, в вашем случае (динамический массив) в структуре лежит просто указатель, который имеет актуальность только в том процессе, в котором его инициализировали (выделили память под него).
0
|
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
|
|
07.10.2015, 10:08 | 7 |
Насчет ошибки обьяви вот так и все должно работать int Prog;
Мучайся с динамическими, так интереснее
0
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|||||||||||
07.10.2015, 10:13 | 8 | ||||||||||
Если это файл с данными типа:
0
|
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
|
|
07.10.2015, 10:14 [ТС] | 9 |
0
|
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
|
||||||
07.10.2015, 10:34 | 10 | |||||
Радует что вы хоть немного думаете а не сдираете с копирки
0
|
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
|
|
07.10.2015, 10:54 [ТС] | 11 |
Игорь1986, да не, все равно не то, cannot convert 'int**' to 'int'. Ну и в целом, как я понимаю, этот код пытается в элемент массива запихнуть другой массив... Или я не прав? Какова суть фрагмента кода, который вы хотели предложить с самого начала?
Ведь изначально 7 строка (rec.Prog=new int[k]) и устанавливает размерность массива, то есть если k=10, то получится типа как при объявлении статического int Prog[10], вот только дальше уже фигушки работать как со статическим...
0
|
07.10.2015, 10:54 | |
07.10.2015, 10:54 | |
Помогаю со студенческими работами здесь
11
Ошибка при обращении к элементу массива; не удается найти автокорреляционную функцию Access violation при обращении по указателю Обращение к элементу динамического массива структур Ошибка 'Access violation at address 00403EF4' при вводе массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |