powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unhandled exepction простая задача
6 сообщений из 6, страница 1 из 1
Unhandled exepction простая задача
    #38007251
Phantom_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Потратил часа два на поиск ошибки, не могли бы вы указать, в чем она, пожалуйста?

УсловиеПостроить график sin(x). Для этого необходимо заполнить двухмерную символьную матрицу звездочками в нужных позициях и вывести ее на экран. Размеры матрицы 25*80

Ошибка: unhandled exepction at <...> acess violation и вылетает в free.c функцию void __cdecl _free_base (void * pBlock)

Код: plaintext
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.
#define high 12
#define length 80
#include <stdio.h>
#include <math.h>
int main()
{
    bool s[high][length];
    int i,j;
    
    for (i = 0; i <= length; i++)
        for (j = -high; j <= high; j++)
            s[i][j] = false;
    
    for (i = 0; i <= length; i++)
	{
		int y = high*sin(i/12.0);
                             s[i][y] = true;
	}

    for (j = high; j >= -high; j--)
        for (i = 0; i <= length; i++)
        {
            if (s[i][j]) printf("*");
            else printf(" ");
            if (i = length) printf("\n");
        }
        
    getchar(); getchar();
    return 0; 
}
...
Рейтинг: 0 / 0
Unhandled exepction простая задача
    #38007300
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Phantom_Z,

В этом коде как минимум следующие проблемы.
1) если length - размер массива, то такая проверка условия цикла некорректна
Код: plaintext
1.
for (i = 0; i  <=  length; i++)


должно быть
Код: plaintext
1.
for (i = 0; i  <  length; i++)



2) Аналогично с high, только там кроме неверного условия еще и неверно индекс рассчитывается (получаются отрицательные индексы, и вообще диапазон индексов в 2 раза шире размера массива)
Код: plaintext
1.
2.
        for (j = -high; j  <=  high; j++)
            s[i][j] = false;


должно быть
Код: plaintext
1.
2.
        for (j = -high/2; j  <  high/2; j++)
            s[i][j + high/2] = false;



В обоих случаях - запись за границами массива, а значит - потенциальный access violation.
Обратите внимание, что у вас в коде несколько таких мест, я привел лишь только 2.
...
Рейтинг: 0 / 0
Unhandled exepction простая задача
    #38007303
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Phantom_ZПотратил часа два на поиск ошибки, не могли бы вы указать, в чем она,
пожалуйста?
В непонимании того, что индексы массива начинаются с нуля. Нарисуй свой массив s на бумаге
и попытайся сам выполнить свои циклы, не утруждая компьютер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Unhandled exepction простая задача
    #38008974
Phantom_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, главная ошибка состояла в том, что я во вложенных циклах неправильно ставил индексы, но ваши советы задали мне движение в нужном направлении ^_^

Однако интересно: почему-то даже без прописанного printf("\n") происходит переход строки и получается график синуса, а не строчка звездочек. Что за магия?

Код: plaintext
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.
#define high 12
#define length 80
#include <stdio.h>
#include <math.h>
int main()
{
    bool s[high*2+1][length];
    int i,j;
    
	for (j = -high; j < high; j++)
		for (i = 0; i < (length); i++)
        
            s[j+high][i] = false;
    
    for (i = 0; i < (length); i++)
	{
		int y = -(high*sin(i/(double)high));
                            s[y+high][i] = true;
	}

    for (j = -high; j < high; j++)
        for (i = 0; i < length; i++)
        {
            if (s[j+high][i]) printf("*");
            else printf(" ");
        }
        
		getchar();
    return 0; 
}
...
Рейтинг: 0 / 0
Unhandled exepction простая задача
    #38008984
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Phantom_ZОднако интересно: почему-то даже без прописанного printf("\n") происходит переход строки и получается график синуса, а не строчка звездочек. Что за магия? Это магия длинных строк и нерезиновых экранов.
Замени printf(" ") на printf("+") и посмотри на результат.
...
Рейтинг: 0 / 0
Unhandled exepction простая задача
    #38011814
Phantom_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

да то же самое получилось. Выяснил, что ширина экрана вывода в консольном приложении как раз равна 80 символам, а высота - 25, т.е. числа в задании так подогнаны, чтобы график выводился на целый экран.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Unhandled exepction простая задача
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]