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

Ошибка "Ascess violation" при выводе массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ После возвращении вектор пуст, хотя в dll size другая информация http://www.cyberforum.ru/cpp-beginners/thread1233498.html
передаю вектор по ссылке в функцию dll он должен вставить элемент но после возвращении вектор пуст,хотя в dll size показывает правильно
C++ Переделать строчный калькулятор через ООП Друзья, имею отличный строчный калькулятор, сделанный через процедурное программирование. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> //#include <string> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1233419.html
Смещение в файле более 4 Gb C++
Всем привет. Есть необходимость хранить смещение на данные в файле(памяти), который более 4 Gb. Задача тривиальна. Нужно использовать c++99. Единственное что приходит в голову, это хранить смещение в виде структуры (fourGbOffsetsNumber, simple1byteOffset). Не подскажите как выйти из положения?
Метод половинного деления для функции от двух переменных C++
Это программа для функции от одной переменной, а можно этот же метод использовать для функции от двух переменных, например? #include <iostream> #include <cmath> using namespace std; const double epsilon = 1e-2; double f(double x) { return 4- exp(x) - 2*x^2;
C++ Является ли правильным проектирование классов с методами у которых есть определённый порядок вызова http://www.cyberforum.ru/cpp-beginners/thread1233390.html
Всем привет. Вопрос к опытным программистам: Является ли в С++ практике правильным проектирование классов с методами у которых есть определённый порядок вызова и однократность в использовании? Примеры: 1) класс соединения с методом Open() который можно вызвать один раз 2) класс с методом SendQuery() который можно выполнить только один раз так как в нём происходит выделение памяти 3) класс с...
C++ В каких случаях нужно создавать динамические переменные, а в каких статические? такой же вопрос и по массивам ! Объясните пожалуйста ! подробнее

Показать сообщение отдельно
prog63
 Аватар для prog63
2 / 2 / 0
Регистрация: 24.11.2013
Сообщений: 77
24.07.2014, 23:47     Ошибка "Ascess violation" при выводе массива
В проекте есть две такие строчки:
C++
1
2
for(int L6x=0;L6x<=argcnt;L6x++){for(int L6y=0;L6y<argsize;L6y++){cout<<ComArgumentList[L6x][L6y];}cout<<endl;}
for(int L7=0;L7<=argcnt;L7++)delete []ComArgumentList[L7];delete []ComArgumentList;
Первая выводит содержимое двухмерного массива символов, а вторая удаляет его.
Если хотя бы одна из этих строчек присутствует, то выскакивает ошибка "Ascess violation: write on adress XXXXX"
Проект вот:
Кликните здесь для просмотра всего текста
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
//---Код:---
//--Библиотеки и '#pragma'-коды:--
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <cyrillic.h>
#pragma hdrstop
#pragma argsused
#include <vcl.h>
//------------------------------------------------------------------------------
//--Константы:
//-Команды:
//Команда выхода:
const string COMMAND_exitcom="exit";
//-Ошибки:
//Синтаксические:
const int ERROR_lbrmiss=10001;
const int ERROR_rbrmiss=10002;
const int ERROR_strml=10011;
 
int main(int argc, char* argv[])
{
print("\nЗагрузка консольного модуля...\n");
class Console
{public:
string command;
int bufsize;
int LastError;
void err(int errcode)
{
switch(errcode)
{
case ERROR_lbrmiss:print("В команде пропущена закрывающая скобка !\n");break;
case ERROR_rbrmiss:print("В команде пропущена открывающая скобка !\n");break;
}
LastError=errcode;
}
char *Version;
void Initial(void)
{
LastError=0;
Version="1.0";
bufsize=50;
argsize=50;
labellistsize=50;
arglistsize=50;
comarglistsize=50;
}
bool LexAnalys(string command)
{
bool result=true;
int strsize=command.length();
int countleft,countright,left,right;
bool argnull;
int argnmb;
lrcf:
countleft=0,countright=0,left=0,right=0;argnull=false;
//Подсчет количества скобок:
//[открывающих:]
for (int L1=0;L1<=strsize;L1++){if(command[L1]=='('){countleft++;}}
//[закрывающих:]
for (int L2=0;L2<=strsize;L2++){if(command[L2]==')'){countright++;}}
//Проверка количества скобок:
if (countleft>countright){LastError=ERROR_lbrmiss;result=false;}
if (countleft<countright){LastError=ERROR_rbrmiss;result=false;}
//Поиск наименьших скобок
fbrack:
for (int L1=0;L1<=strsize;L1++){if(command[L1]=='('){left=L1;}}
for (int L2=left;L2<=strsize;L2++){if(command[L2]==')'){right=L2;break;}}
cout<<endl<<"left="<<left+1<<endl<<"right="<<right-1<<endl;
//Подсчет количества разделителей аргументов:
int divcount=0;
for(int L3=left+1;L3<right;L3++){if(command[L3]==','){divcount++;}}
divcount++;
int argleft=left+1,argright=right-1;
bool argrghtfinded=false;
divfind1:
argrghtfinded=false;
argnull=false;
for(int L4=argleft+1;L4<argright;L4++){if(command[L4]==','){argright=L4-1;argrghtfinded=true;break;}}
if(argrghtfinded==true){
if(argleft==argright+1){argnull=true;}
if(argright==argleft&&command[argleft+1]==' '){argnull=true;}
if(argnull){divcount--;}
argleft=argright+2;
argright=right-1;}
if(argrghtfinded==true)goto divfind1;
cout<<"argcount="<<divcount<<endl<<endl;
 
getch();
 
//Создание массива аргументов
char **ComArgumentList = new char* [divcount];
for(int count = 0; count<divcount;count++)
ComArgumentList[count]=new char[argsize];
//Очистка массива
for (int L6x=0;L6x<divcount;L6x++){for (int L6y=0;L6y<argsize;L6y++){ComArgumentList[L6x][L6y]=' ';}}
 
getch();
 
argleft=left+1,argright=right-1;
argrghtfinded=false;
int argcnt=0;
divfind2:
argrghtfinded=false;
argnull=false;
if(argleft<argright-1){cout<<"argleft ("<<argleft<<") < argright-1 ("<<argright-1<<")"<<endl;}else{cout<<"argleft ("<<argleft<<") >= argright-1 ("<<argright-1<<")"<<endl;}
for(int L4=argleft+1;L4<argright;L4++){if(command[L4]==','){argright=L4-1;argrghtfinded=true;cout<<"\",\" has finded in ["<<L4<<"]"<<endl;break;}}
cout<<"argleft="<<argleft<<endl;
cout<<"argright="<<argright<<endl;
cout<<"argument:";
 
getch();
 
for(int L6=argleft;L6<=argright;L6++)cout<<command[L6];
for(int L6=argleft-1;L6<=argright;L6++)ComArgumentList[argcnt][L6-argleft]=command[L6];
argcnt++;
cout<<endl<<endl;
if(argrghtfinded==true){
if(argleft==argright+1){argnull=true;cout<<"argument is empty"<<endl;}
if(argright==argleft&&command[argleft+1]==' '){argnull=true;cout<<"argument is empty"<<endl;}
if(argnull){divcount--;}
argleft=argright+2;
argright=right-1;}
if(argrghtfinded==true)goto divfind2;
 
getch();
 
for(int L6x=0;L6x<=argcnt;L6x++){for(int L6y=0;L6y<argsize;L6y++){cout<<ComArgumentList[L6x][L6y];}cout<<endl;}
for(int L7=0;L7<=argcnt;L7++)delete []ComArgumentList[L7];delete []ComArgumentList;
 
return result;
}
private:int argsize,labellistsize,arglistsize,comarglistsize;};
Console console;
print("Консольный модуль загружен\n");
print("Инициализация...\n");
console.Initial();
print("Консоль запущена\n");
print("Версия: ");print(console.Version);print("\n\n");
 
 
 
//Ввод команды:
while (!(console.command==COMMAND_exitcom)){
console.command="";
cout<<">";
//cout<<"func(arg1,arg2,arg3)";
getline(cin,console.command);
 
//console.command="func(arg1,arg2,arg3)";
 
if(!(console.command==COMMAND_exitcom)){
if (console.command.length()>console.bufsize){print("Ошибка! Строка длиннее ");cout<<console.bufsize;print(" символа(ов) !\n");console.err(ERROR_strml);}
//Удаление двойных пробелов:
for (int L1 = 0;L1<console.command.length();L1++) if (console.command[L1] == ' ' && console.command[L1+1] == ' ') {console.command.erase(L1,1); L1--;}
 
//Добавление управляющих скобок:
console.command="("+console.command+")";
//Вызов функции лексического анализирования:
if(!(console.LexAnalys(console.command))){console.err(console.LastError);};}
}
print("Выход...\n");
getch();
        return 0;
}
//------------------------------------------------------------------------------


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