kashmar4ik

ответов0 / помог1

Возникает ошибка нарушение прав доступа при чтении при написании рисовалки графиков в консоли

Обновлен 1680282663
Всем привет! Недавно начал изучать С++ и когда добрался до массивов - возникла идея написать рисовалку графиков в консоли. Получилась вот такая штука:

#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int n;
    n = 1550;
 
    string** web = new string* [n];
 
    for (int i = 0; i < n; i++)
 
    {
 
        web[i] = new string[n];
 
    }
    for (int i = 0; i < 40; i++)
    {
        for (int j = 0; j < 155; j++)
        {
            web[i][j] = ".";
        }
    }
 
 
 
    int x,y;
    double formula;
    
 
    for (int i = 0; i < 155; i++)
    {
                x = i - 77;
                formula = x*x;
                y = formula / 10;
                
 
                double k = 20 - y;
 
                if (k < 0 && k > 39)
                {
                    return 0;
                }
                else
                {
                    web[20 - y][i] = "0";
                }   
                
    }
 
 
 
    for (int x = 0; x < 155; x++)
    {
        web[20][x] = "-";
    }
 
    web[20][154] = ">";
 
    for (int y = 0; y < 40; y++)
    {
        web[y][77] = "|";
    }
 
 
    for (int i = 0; i < 40; i++)
    {
        for (int j = 0; j < 155; j++)
        {
          cout <<  web[i][j];
        }
        cout << endl;
    }
 
    for (int i = 0; i < n; i++)
    {
        delete [] web[i];
    }
    delete[] web;
}
Но проблема вот в чём. Если мы меняем переменную formula на другую. Например на x*x, чтобы нарисовать параболу - то получаем ошибку. Избавиться от нее можно только изменив параметр y = formula / 10 например на y = formula / 1000. Но при таком варианте, линию рисовать программа уже не будет. Вопрос состоит в том, как исправить эту ошибку и из-за чего она возникает? Если что - размер динамического массива такой большой из-за того, что после отладки на маленьком масштабе - я хочу увеличить масштаб) Добавлено через 21 минуту Если вы поменяйте переменную formula на formula = x, или formula = 2*x то всё будет работать. А вот с другими формулами, например 5*x - уже нет, нужно менять y.
zss
ответов4 / помог6
Сергей Сергеевич 1680282841
kashmar4ik, «web[20 - y][i] = "0";» При y>20 выход за границы Поэтому надо ограничивать y:

y = formula / 10;
if(y>20)
   y=20;
kashmar4ikвлепить жирный лайк
kashmar4ik
ответов0 / помог1
1680283000
zss, «Поэтому надо ограничивать y:» Так я вроде снизу выставил условие через if? Почему оно не работает?
влепить жирный лайк
zss
ответов4 / помог6
Сергей Сергеевич 1680283091
kashmar4ik,

y = formula / 10;
double k = 20 - y;
if (k < 0 && k > 39)
 {
 return 0;
 }
 else
 {
 web[20 - y][i] = "0";
 }
Где Вы тут видите ограничение y?
kashmar4iksashвлепить жирный лайк
kashmar4ik
ответов0 / помог1
1680283189
zss,
double k = 20 - y;
if (k < 0 && k > 39)
 {
 return 0;
 }
Я предполагал, что если у нас значение k < 0 или K > 39, то ничего не будет происходить, тоесть типо таким образом наложить ограничение на y
sashвлепить жирный лайк
zss
ответов4 / помог6
Сергей Сергеевич 1680283290
kashmar4ik, «if (k < 0 && k > 39)» всегда даёт ложь

int k = 20 - y;
if (k < 0)k=0;
else if(k > 39)k=39;
web[k][i] = "0";
kashmar4iksashвлепить жирный лайк
Сначала вход
A B i U S JS PHP HTML CSS SQL C C++ C# PYTHON JAVA
Для входа только имэйл или имя и апроль
Можно сменить аватар
Имэйл Ваше имя
Пароль