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

Переполнение массива - C++

Восстановить пароль Регистрация
 
R0adTr1p
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 11
12.02.2013, 23:11     Переполнение массива #1
Добрый день господа.
Столкнулся с очередной проблемой и не знаю как решить.
Где то в этой программе происходит переполнение массива A. Помогите найти мою ошибку, пожалуйста. :3

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
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
#define SIZE 3
#define x A[0]
#define y A[1]
#define a A[2]
#define b A[3]
 
int main( )
{
    float A[SIZE],d,c,result;
    cin >> A[0]; //x
    cin >> A[1]; //y
    cin >> A[2]; //a
    cin >> A[3]; //b
    if ((a == b) || (y <= 0)) 
    {
        printf("Incorrect data");
    } else {
        d = ((4 - x * x) * tan(2)) / (sqrt(a) - sqrt(b));
        c = sin(pow((1 + pow((log(y) / log(3)), 1/3)), 4));
    
        if (d*d + c*c <= 10) 
            result = d + c;
        else 
            result = sqrt(abs(d + c));
 
        printf("%0.3f\n", result);
    }
    _getch();
    return 0;
}
Кому интересно, что за формулы:
https://www.dropbox.com/s/741guqixgd4q2hl/123.jpg
https://www.dropbox.com/s/l3e0iwfyhkn2xoe/124.jpg
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2013, 23:11     Переполнение массива
Посмотрите здесь:

Исключительная ситуация (переполнение массива сверху) C++
Переполнение стека C++
C++ Переполнение
Переполнение C++
C++ Переполнение include
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
12.02.2013, 23:18     Переполнение массива #2
Что такое "переполнение массива"?
R0adTr1p
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 11
12.02.2013, 23:19  [ТС]     Переполнение массива #3
Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
12.02.2013, 23:21     Переполнение массива #4
Вы задаете SIZE 3, а у самого 4 элемента в массиве.
R0adTr1p
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 11
12.02.2013, 23:23  [ТС]     Переполнение массива #5
Прошу прощения, был не совсем честен с вами.
У меня так же есть примеры ввода и вывода:
Ввод 1
2 3 4 5
Вывод 1
-0.288

Весь парадокс в том, что программа выдает верный ответ, а затем выдает как раз то сообщение:
Run-Time Check Failure #2 - Stack around the variable 'A' was corrupted.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
12.02.2013, 23:24     Переполнение массива #6
Оу, я просто код не читал. Когда вы указываете в квадратных скобках 3, вы просто создаете массив из трёх элементов, следовательно если вы обратитесь к третьему элементу — вы нарушите границы массива.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
12.02.2013, 23:25     Переполнение массива #7
C++
1
#define SIZE 4
R0adTr1p
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 11
12.02.2013, 23:26  [ТС]     Переполнение массива #8
Извольте, но разве нумерация массивов начинается с единицы?
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
12.02.2013, 23:26     Переполнение массива #9
R0adTr1p, в Си — с нуля, следовательно, в С++ — тоже.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.02.2013, 23:28     Переполнение массива #10
Цитата Сообщение от R0adTr1p Посмотреть сообщение
Извольте, но разве нумерация массивов начинается с единицы?
начинается - с нуля
заканчивается, если можно так выразится, на SIZE-1 включительно
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 52
12.02.2013, 23:28     Переполнение массива #11
R0adTr1p, float A[SIZE] значит что создаётся массив вещественных чисел на SIZE элементов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 23:31     Переполнение массива
Еще ссылки по теме:

Переполнение стека в рекурсивной функции сортировки большого массива C++
C++ Переполнение буфера
Переполнение массива C++

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

Или воспользуйтесь поиском по форуму:
R0adTr1p
0 / 0 / 1
Регистрация: 12.02.2013
Сообщений: 11
12.02.2013, 23:31  [ТС]     Переполнение массива #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
начинается - с нуля
заканчивается, если можно так выразится, на SIZE-1 включительно
Все понятно.) Спасибо. Что то я снубил
Yandex
Объявления
12.02.2013, 23:31     Переполнение массива
Ответ Создать тему
Опции темы

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