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

Ошибка при работе с памятью - C++

Восстановить пароль Регистрация
 
pro_mary
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 99
23.05.2011, 19:10     Ошибка при работе с памятью #1
Написан следующий код:
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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cstdlib>
#include <fstream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double pi = 3.1415926535;
    int n;
    cout << "Please, enter lenght of reference sequence: ";
    cin >> n;
    int K;
    cout << "K = ";
    cin >> K;
    double *sn = new double[n-1];   // массив последовательности
    
    for (int i = 0; i < n; i++)
    {
        sn[i] = K * sin ((pi*i)/(n-1));
        cout << "sin ( " << ((pi*i)/(n-1)) << " )" << " = " << sn[i] << endl;
    }
        delete []sn;
 
        system("pause");
    return 0;
}
Сначала все работало нормально, потом появилась ошибка работы с памятью:"Windows has triggered a breakpoint in sposob1.exe.

This may be due to a corruption of the heap, which indicates a bug in sposob1.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while sposob1.exe has focus.

The output window may have more diagnostic information.". При компиляции никаких ошибок нет. Что не так? Подскажите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
23.05.2011, 19:13     Ошибка при работе с памятью #2
Цитата Сообщение от pro_mary Посмотреть сообщение
C++
1
    double *sn = new double[n-1];   // массив последовательности
А почему n-1?
pro_mary
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 99
23.05.2011, 19:18  [ТС]     Ошибка при работе с памятью #3
количество элементов в массиве должно быть n.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
23.05.2011, 19:25     Ошибка при работе с памятью #4
Цитата Сообщение от pro_mary Посмотреть сообщение
количество элементов в массиве должно быть n.
В том то и дело что n. Поэтому:
C++
1
double *sn = new double[n];
Yandex
Объявления
23.05.2011, 19:25     Ошибка при работе с памятью
Ответ Создать тему
Опции темы

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