Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:01     почему выдает access violation? #1
подскажите плиз изза чего доступ ограничивает, и как сделать чтоб я мог каждому элементу массива структур присваивать по строке......заранее спасибо))

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2010, 21:01     почему выдает access violation?
Посмотрите здесь:

C++ Unhandled exception .. access violation
C++ Access violation
C++ Почему _lwrite выдает ошибку 5 access denied?
Ошибка Access Violation C++
C++ Crash (access violation)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psixodelik
 Аватар для Psixodelik
38 / 37 / 2
Регистрация: 27.11.2009
Сообщений: 93
25.04.2010, 21:20     почему выдает access violation? #2
Воспользуйся дебагом(благо он в визуал студио интуитивно понятный)...и посмотри в какой строке идёт ошибка
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:22  [ТС]     почему выдает access violation? #3
я просто никогда подобного не делал,вот и не знаю.....так что дебаг мне не поможет...
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 21:28     почему выдает access violation? #4
C++
1
new char = stroka->str;
Че это такое?
А что должен делать этот код?
C++
1
mstr[i]=stroka->str;
Psixodelik
 Аватар для Psixodelik
38 / 37 / 2
Регистрация: 27.11.2009
Сообщений: 93
25.04.2010, 21:29     почему выдает access violation? #5
А кстати вообще...в каком компиляторе делалось сиё чудо....а то stdafx подключён, как бы намёк на Visual studio, но при этом используется getch, хотя в студии он не нужен(в конце)....

Добавлено через 51 секунду
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
new char = stroka->str;
Че это такое?
А можно вопрос? Что вообще такое
C++
1
->
Такое я видел только в компиляторе от борланда....да и то тут не то применение
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
25.04.2010, 21:30     почему выдает access violation? #6
Psixodelik, -> - обращение к элементам структуры, если используется указатель на структуру
C++
1
st->str аналогично с (*st).str
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 21:31     почему выдает access violation? #7
Цитата Сообщение от Psixodelik Посмотреть сообщение
А можно вопрос? Что вообще такое
Здрасьте... Это вообще-то обращение к элементу структуры, если используется указатель на объект. Борланд тут не при чем. Это С++.
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:38  [ТС]     почему выдает access violation? #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 не пашет....
если в переводе с паскаля то это как разыменование....как уже сказали указатель на элемент структуры...)))
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 21:41     почему выдает access violation? #9
Цитата Сообщение от krolex Посмотреть сообщение
у меня объявлен массив структур,и я хочу каждому элементу этого массива присвоить по строке......
Нет. Ты хочешь не элементу массива присвоить по строке, элементу структуры каждого объекта в строке. Вот я тебя и спрашиваю. Нафига тебе этот код? Что он делает? Ответишь - найдешь ошибку.
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:54  [ТС]     почему выдает access violation? #10
Цитата Сообщение от Vourhey Посмотреть сообщение
Нет. Ты хочешь не элементу массива присвоить по строке, элементу структуры каждого объекта в строке. Вот я тебя и спрашиваю. Нафига тебе этот код? Что он делает? Ответишь - найдешь ошибку.
.....насколько я знаю (мои познания в программировании малы до нельзя), то когда я пишу после
C++
1
2
3
4
struct st 
{ 
    char *str;
}
mstr[5];

то этим я хочу сказать что mstr это массив указателей на элемент каждый из которых имеет внутри по строке......если это не так,то значит мои представления об этом ложны.....тогда обращаюсь с просьбой объяснить как сделать это)))
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 22:01     почему выдает access violation? #11
Вот именно, что у тебя каждый элемент - это объект структуры, а не строка.
А теперь расскажи, что делает вот этот код (как он вообще у тебя скомпилялся, понятия не имею):
C++
1
new char = stroka->str;
и вот этот этот:
C++
1
mstr[i]=stroka->str;
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:06  [ТС]     почему выдает access violation? #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;
}
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 22:09     почему выдает access violation? #13
krolex, ух ты. Ты только убрал структуру. Ошибки те же. Вопросы те же. Выше.
Что делает этот код:
C++
1
new char = str;
и этот:
C++
1
mstr[i]=str;
И еще, кто после тебя память выделенную будет удалять?
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:15  [ТС]     почему выдает access violation? #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; //присваиваю одному из элементов массива эту строку....
    }
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
25.04.2010, 22:17     почему выдает access violation? #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;
}
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 22:17     почему выдает access violation? #16
Цитата Сообщение от krolex Посмотреть сообщение
new char = str; //выделяю память под строку,но она не выделяется
Правильно. Не выделяется потому что ты неправильно написал код выделения памяти. Исправь.
Цитата Сообщение от krolex Посмотреть сообщение
scanf("%s",str); //считываю строку
mstr[i]=str; //присваиваю одному из элементов массива эту строку....
Присваивать ничего не нужно. У тебя вообще строка лишняя. У тебя массив из пяти указателей на строки. Так на кой тебе понадобилась еще одна str? Непонятно.
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:30  [ТС]     почему выдает access violation? #17
то что посоветовал pointsequal пашет,но всеравно если я выделялбы память new char= str[100];
то он выдает ошибку......пасиб всеравно....это было самое легкое.....само задание ещё длинное.....))))


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


пасибо вам огромное))))ща буду дальше делать и думать по поводу другого вопроса,я уже создал тему "освобождение памяти от элементов списка"
с освобождением памяти особые проблемы))))
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
25.04.2010, 22:36     почему выдает access violation? #18
krolex,

выделение памяти под строку
C++
1
2
char *p;
   p=new char[100];
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:40  [ТС]     почему выдает access violation? #19
ооооо......дошло))))теперь понятно почему он говорил ошибку и не хотел преобразовывать char в *char....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2010, 22:41     почему выдает access violation?
Еще ссылки по теме:

C++ access violation at address
access violation reading location C++
Access violation reading location C++

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2010, 22:41     почему выдает access violation? #20
Цитата Сообщение от krolex Посмотреть сообщение
я выделялбы память new char= str[100];
Может, тебе лучше хотя бы один пример посмотреть, как выделять память через new? А то, имхо, ты не вкуриваешь совсем... У тебя new слева от знака равенства.
Цитата Сообщение от krolex Посмотреть сообщение
уже создал тему "освобождение памяти от элементов списка"
Ты лучше бы книжку почитал ) память из под new освобождается delete'ом. Лучше бы часа два помучался.
Yandex
Объявления
25.04.2010, 22:41     почему выдает access violation?
Ответ Создать тему
Опции темы

Текущее время: 00:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru