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

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

25.04.2010, 21:01. Просмотров 1668. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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() { setlocale(LC_CTYPE,...

Ошибка доступа access violation: почему класс-наследник не видит protected данные-члены класса-родителя?
Подскажите есть базовый класс в разделе protected разместил переменную, которая по идее должна быть...

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

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

20
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
25.04.2010, 21:20 2
Воспользуйся дебагом(благо он в визуал студио интуитивно понятный)...и посмотри в какой строке идёт ошибка
0
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 21:22  [ТС] 3
я просто никогда подобного не делал,вот и не знаю.....так что дебаг мне не поможет...
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 21:28 4
C++
1
new char = stroka->str;
Че это такое?
А что должен делать этот код?
C++
1
mstr[i]=stroka->str;
0
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
4335 / 1467 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
25.04.2010, 21:30 6
Psixodelik, -> - обращение к элементам структуры, если используется указатель на структуру
C++
1
st->str аналогично с (*st).str
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 21:31 7
Цитата Сообщение от Psixodelik Посмотреть сообщение
А можно вопрос? Что вообще такое
Здрасьте... Это вообще-то обращение к элементу структуры, если используется указатель на объект. Борланд тут не при чем. Это С++.
0
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
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 21:41 9
Цитата Сообщение от krolex Посмотреть сообщение
у меня объявлен массив структур,и я хочу каждому элементу этого массива присвоить по строке......
Нет. Ты хочешь не элементу массива присвоить по строке, элементу структуры каждого объекта в строке. Вот я тебя и спрашиваю. Нафига тебе этот код? Что он делает? Ответишь - найдешь ошибку.
0
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
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 22:01 11
Вот именно, что у тебя каждый элемент - это объект структуры, а не строка.
А теперь расскажи, что делает вот этот код (как он вообще у тебя скомпилялся, понятия не имею):
C++
1
new char = stroka->str;
и вот этот этот:
C++
1
mstr[i]=stroka->str;
1
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
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 22:09 13
krolex, ух ты. Ты только убрал структуру. Ошибки те же. Вопросы те же. Выше.
Что делает этот код:
C++
1
new char = str;
и этот:
C++
1
mstr[i]=str;
И еще, кто после тебя память выделенную будет удалять?
1
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
ниначмуроФ
846 / 530 / 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
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 22:17 16
Цитата Сообщение от krolex Посмотреть сообщение
new char = str; //выделяю память под строку,но она не выделяется
Правильно. Не выделяется потому что ты неправильно написал код выделения памяти. Исправь.
Цитата Сообщение от krolex Посмотреть сообщение
scanf("%s",str); //считываю строку
mstr[i]=str; //присваиваю одному из элементов массива эту строку....
Присваивать ничего не нужно. У тебя вообще строка лишняя. У тебя массив из пяти указателей на строки. Так на кой тебе понадобилась еще одна str? Непонятно.
1
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:30  [ТС] 17
то что посоветовал pointsequal пашет,но всеравно если я выделялбы память new char= str[100];
то он выдает ошибку......пасиб всеравно....это было самое легкое.....само задание ещё длинное.....))))


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


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

выделение памяти под строку
C++
1
2
char *p;
   p=new char[100];
1
9 / 9 / 2
Регистрация: 27.01.2010
Сообщений: 63
25.04.2010, 22:40  [ТС] 19
ооооо......дошло))))теперь понятно почему он говорил ошибку и не хотел преобразовывать char в *char....
0
Почетный модератор
7328 / 2594 / 268
Регистрация: 29.07.2006
Сообщений: 13,583
25.04.2010, 22:41 20
Цитата Сообщение от krolex Посмотреть сообщение
я выделялбы память new char= str[100];
Может, тебе лучше хотя бы один пример посмотреть, как выделять память через new? А то, имхо, ты не вкуриваешь совсем... У тебя new слева от знака равенства.
Цитата Сообщение от krolex Посмотреть сообщение
уже создал тему "освобождение памяти от элементов списка"
Ты лучше бы книжку почитал ) память из под new освобождается delete'ом. Лучше бы часа два помучался.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2010, 22:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Сортировка слиянием и Access Violation
Доброе время суток. Подскажите в чем я мог просчитаться(строчку с ошибкой отметил комментарием): ...


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

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

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