Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
1

почему выдает access violation?

25.04.2010, 21:01. Просмотров 1353. Ответов 20
Метки нет (Все метки)

подскажите плиз изза чего доступ ограничивает, и как сделать чтоб я мог каждому элементу массива структур присваивать по строке......заранее спасибо))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h> 
#include <stdlib.h>
 
struct st // Объявление структуры st
{ 
    char str[100];
} mstr[5]; // Объявление массива структур mstr
 
st *stroka;
int i;
 
int _tmain(int argc, _TCHAR* argv[])
{
    for (i=1;i<5;i++)
    {
        puts("vvedite stroku");
        new char = stroka->str;
        scanf("%s",stroka->str);
                      mstr[i]=stroka->str;
    }
 
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2010, 21:01
Ответы с готовыми решениями:

Код выдает ошибку Access violation writing location
#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;locale.h&gt; int main()...

Почему _lwrite выдает ошибку 5 access denied?
Программа открывает файл для записи, пишет в него. Все хорошо. Но через полгода...

Access violation
Помогите пожалуйста. Не могу разобраться. Нашел в каком месте ругается. Но не...

access violation at address
Дорогие форумчане, столкнулся с проблемой, читаю бинарный файл по структуре : ...

Crash (access violation)
Задача: http://acm.timus.ru/problem.aspx?space=1&amp;num=1313 p.s. ссылку лучше...

20
Psixodelik
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
25.04.2010, 21:20 2
Воспользуйся дебагом(благо он в визуал студио интуитивно понятный)...и посмотри в какой строке идёт ошибка
0
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:22  [ТС] 3
я просто никогда подобного не делал,вот и не знаю.....так что дебаг мне не поможет...
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 21:28 4
C++
1
new char = stroka->str;
Че это такое?
А что должен делать этот код?
C++
1
mstr[i]=stroka->str;
0
Psixodelik
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
25.04.2010, 21:29 5
А кстати вообще...в каком компиляторе делалось сиё чудо....а то stdafx подключён, как бы намёк на Visual studio, но при этом используется getch, хотя в студии он не нужен(в конце)....

Добавлено через 51 секунду
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
new char = stroka->str;
Че это такое?
А можно вопрос? Что вообще такое
C++
1
->
Такое я видел только в компиляторе от борланда....да и то тут не то применение
0
yanyk1n
4331 / 1463 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
25.04.2010, 21:30 6
Psixodelik, -> - обращение к элементам структуры, если используется указатель на структуру
C++
1
st->str аналогично с (*st).str
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 21:31 7
Цитата Сообщение от Psixodelik Посмотреть сообщение
А можно вопрос? Что вообще такое
Здрасьте... Это вообще-то обращение к элементу структуры, если используется указатель на объект. Борланд тут не при чем. Это С++.
0
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:38  [ТС] 8
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
new char = stroka->str;
Че это такое?
А что должен делать этот код?
C++
1
mstr[i]=stroka->str;

C++
1
new char = stroka->str
это по моему выделение памяти....конечно я могу быть и не прав))))
у меня объявлен массив структур,и я хочу каждому элементу этого массива присвоить по строке......

Добавлено через 1 минуту
Цитата Сообщение от Psixodelik Посмотреть сообщение
А кстати вообще...в каком компиляторе делалось сиё чудо....а то stdafx подключён, как бы намёк на Visual studio, но при этом используется getch, хотя в студии он не нужен(в конце)....

Добавлено через 51 секунду


А можно вопрос? Что вообще такое
C++
1
->
Такое я видел только в компиляторе от борланда....да и то тут не то применение

visual studio 2008
getch(); типа тормоза для проги, без conio.h не пашет....
если в переводе с паскаля то это как разыменование....как уже сказали указатель на элемент структуры...)))
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 21:41 9
Цитата Сообщение от krolex Посмотреть сообщение
у меня объявлен массив структур,и я хочу каждому элементу этого массива присвоить по строке......
Нет. Ты хочешь не элементу массива присвоить по строке, элементу структуры каждого объекта в строке. Вот я тебя и спрашиваю. Нафига тебе этот код? Что он делает? Ответишь - найдешь ошибку.
0
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:54  [ТС] 10
Цитата Сообщение от Vourhey Посмотреть сообщение
Нет. Ты хочешь не элементу массива присвоить по строке, элементу структуры каждого объекта в строке. Вот я тебя и спрашиваю. Нафига тебе этот код? Что он делает? Ответишь - найдешь ошибку.
.....насколько я знаю (мои познания в программировании малы до нельзя), то когда я пишу после
C++
1
2
3
4
struct st 
{ 
    char *str;
}
mstr[5];

то этим я хочу сказать что mstr это массив указателей на элемент каждый из которых имеет внутри по строке......если это не так,то значит мои представления об этом ложны.....тогда обращаюсь с просьбой объяснить как сделать это)))
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 22:01 11
Вот именно, что у тебя каждый элемент - это объект структуры, а не строка.
А теперь расскажи, что делает вот этот код (как он вообще у тебя скомпилялся, понятия не имею):
C++
1
new char = stroka->str;
и вот этот этот:
C++
1
mstr[i]=stroka->str;
1
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:06  [ТС] 12
в лекциях которые у меня есть ща накапал где ошибка,ща исправил,но всеравно не дает память....



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h> 
#include <stdlib.h>
 
char* mstr[5]; 
char *str;
int i;
 
int _tmain(int argc, _TCHAR* argv[])
{
    for (i=1;i<6;i++)
    {
        printf ("vvedite stroku %d",i);
        new char = str;
        scanf("%s",str);
        mstr[i]=str;
    }
 
    getch();
    return 0;
}
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 22:09 13
krolex, ух ты. Ты только убрал структуру. Ошибки те же. Вопросы те же. Выше.
Что делает этот код:
C++
1
new char = str;
и этот:
C++
1
mstr[i]=str;
И еще, кто после тебя память выделенную будет удалять?
1
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:15  [ТС] 14
Массив указателей на строки
C++
1
char* <Имя>[<Размер 1>] [= <Значение>];
Примеры:
C++
1
char* mn[4] = {“весна”, “лето”,”осень”,”зима”};
в моем случае
C++
1
char* mstr[5];
дальше я хочу в каждый элемент этого массива вставить по строке,и получить типа "последовательность строк"....
для этого я и делаю следующую часть проги


C++
1
2
3
4
5
6
7
for (i=1;i<6;i++)
    {
        printf ("vvedite stroku %d",i); 
        new char = str; //выделяю память под строку,но она не выделяется
        scanf("%s",str); //считываю строку
        mstr[i]=str; //присваиваю одному из элементов массива эту строку....
    }
0
PointsEqual
ниначмуроФ
840 / 524 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
25.04.2010, 22:17 15
krolex, может вот что тебе надо?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct st // Объявление структуры st
{
        char str[100];
};
 
int main()
{
 
    st mas[5];
 
        for (int i=0;i<5;i++)
        {
                puts("vvedite stroku");
                scanf("%s",mas[i].str);
        }
 
        getch();
        return 0;
}
1
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 22:17 16
Цитата Сообщение от krolex Посмотреть сообщение
new char = str; //выделяю память под строку,но она не выделяется
Правильно. Не выделяется потому что ты неправильно написал код выделения памяти. Исправь.
Цитата Сообщение от krolex Посмотреть сообщение
scanf("%s",str); //считываю строку
mstr[i]=str; //присваиваю одному из элементов массива эту строку....
Присваивать ничего не нужно. У тебя вообще строка лишняя. У тебя массив из пяти указателей на строки. Так на кой тебе понадобилась еще одна str? Непонятно.
1
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:30  [ТС] 17
то что посоветовал pointsequal пашет,но всеравно если я выделялбы память new char= str[100];
то он выдает ошибку......пасиб всеравно....это было самое легкое.....само задание ещё длинное.....))))


Тема 24. Текстовая обработка.
Дана последовательность строк. Каждая строка состоит из слов, разделенных пробелами. Написать программу, обеспечивающую ввод строк и их корректировку. Корректировка заклю-чается в обмене местами слов максимальной и минимальной длины в каждой строке. Если сре-ди слов строки есть несколько таких слов, то в обмене участвуют только первые обнаруженные слова. Вывести на печать исходную и скорректированную последовательности строк.


пасибо вам огромное))))ща буду дальше делать и думать по поводу другого вопроса,я уже создал тему "освобождение памяти от элементов списка"
с освобождением памяти особые проблемы))))
0
PointsEqual
ниначмуроФ
840 / 524 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
25.04.2010, 22:36 18
krolex,

выделение памяти под строку
C++
1
2
char *p;
   p=new char[100];
1
krolex
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:40  [ТС] 19
ооооо......дошло))))теперь понятно почему он говорил ошибку и не хотел преобразовывать char в *char....
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.04.2010, 22:41 20
Цитата Сообщение от krolex Посмотреть сообщение
я выделялбы память new char= str[100];
Может, тебе лучше хотя бы один пример посмотреть, как выделять память через new? А то, имхо, ты не вкуриваешь совсем... У тебя new слева от знака равенства.
Цитата Сообщение от krolex Посмотреть сообщение
уже создал тему "освобождение памяти от элементов списка"
Ты лучше бы книжку почитал ) память из под new освобождается delete'ом. Лучше бы часа два помучался.
1
25.04.2010, 22:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2010, 22:41

Ошибка Access Violation
Собственно, проблемма: Есть класс, в котором есть переменные (3 шт): class...

Access violation reading location
Помогите пожалуйста! Создаю программу, которая ведет учет данных. В бинарный...

Unhandled exception .. access violation
Вот в этом коде выдает .. подозреваю что связано с вводом .. подскажите что не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru