0 / 0 / 0
Регистрация: 20.02.2020
Сообщений: 1
1

Чтение недопустимых данных, динамические массивы, типы данных

20.02.2020, 18:01. Показов 25036. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, реализую метод интерполяции сплайнами на С++, при подсчете одного из коэффициентов появляется данное сообщение.

" C6385 Чтение недопустимых данных из "b": доступный для чтения объем равен "(N+1)*8" байт, однако считать можно только "24" байт ".

Строки на которых горит ошибка:
delta[1] = -h[2] / (2 * (h[1] + h[2]));
lambda[1] = 1.5 * (l[2] - l[1]) / (h[1] + h[2]);

double F = y[k] + b[k] * (s - x[k]) + c[k] * pow(s - x[k], 2) + d[k] * pow(s - x[k], 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
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
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <process.h>
#include <iomanip>
 
using namespace std;
 
void main() {
 
    double* x, * y, * h, * l, * delta, * lambda, * c, * d, * b;
    int N, n, i, k;
 
    cout << " Size" << "\n" << " i = ";
    cin >> N;
 
    x = new double[N + 1];
    y = new double[N + 1];
    h = new double[N + 1];
    l = new double[N + 1];
    delta = new double[N + 1];
    lambda = new double[N + 1];
    c = new double[N + 1];
    d = new double[N + 1];
    b = new double[N + 1];
 
    for (i = 1; i <= N; i++)
    {
        x[i] = i;
        y[i] = pow(x[i], 2);
        cout << " X[" << i << "] = " << y[i] << "\t" << " Y[" << i << "] = " << y[i] << "\n";
    }
 
    for (k = 1; k <= N; k++) {
        h[k] = x[k] - x[k - 1];
        if (h[k] == 0) {
            printf("\nError, x[%d]=x[%d]\n", k, k - 1);
            return;
        }
        l[k] = (y[k] - y[k - 1]) / h[k];
    }
    delta[1] = -h[2] / (2 * (h[1] + h[2]));
    lambda[1] = 1.5 * (l[2] - l[1]) / (h[1] + h[2]);
    for (k = 3; k <= N; k++) {
        delta[k - 1] = -h[k] / (2 * h[k - 1] + 2 * h[k] + h[k - 1] * delta[k - 2]);
        lambda[k - 1] = (3 * l[k] - 3 * l[k - 1] - h[k - 1] * lambda[k - 2]) /
            (2 * h[k - 1] + 2 * h[k] + h[k - 1] * delta[k - 2]);
    }
    c[0] = 0;
    c[N] = 0;
    for (k = N; k >= 2; k--) {
        c[k - 1] = delta[k - 1] * c[k] + lambda[k - 1];
    }
    for (k = 1; k <= N; k++) {
        d[k] = (c[k] - c[k - 1]) / (3 * h[k]);
        b[k] = l[k] + (2 * c[k] * h[k] + h[k] * c[k - 1]) / 3;
    }
 
    printf("\nA[k]\t\tB[k]\t\tC[k]\t\tD[k]\n");
    for (k = 1; k <= N; k++) {
        printf("%f\t%f\t%f\t%f\n", y[k], b[k], c[k], d[k]);
    }
 
    double start = x[1];
    double end = x[N];
    double step = (end - start) / 20;
    /*for (double s = start; s <= end; s += step) {
        //find k, where s in [x_k-1; x_k]
        for (int k = 1; k <= N; k++) {
            if (s >= x[k - 1] && s <= x[k]) {
                break;
            }
        }
        double F = y[k] + b[k] * (s - x[k]) + c[k] * pow(s - x[k], 2) + d[k] * pow(s - x[k], 3);
        cout << s << "\t" << F << "\n";
    }*/
 
    cout << start << "\t" << end << "\n";
 
    delete[] x;
    delete[] y;
    delete[] h;
    delete[] l;
    delete[] delta;
    delete[] lambda;
    delete[] c;
    delete[] d;
    delete[] b;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2020, 18:01
Ответы с готовыми решениями:

Чтение недопустимых данных и переполнение буфера
Жалуется на чтение недопустимых данных на 24 и 55 строках, и на переполнение буфера на 51 и 61...

Двумерные массивы. При вводе данных появляется сообщение о недопустимых значениях
Всех приветствую, я совсем недавно начал изучать C#, мне был приведен пример выполнения работы в...

Динамические типы данных(список)
Дорогие форумчане, поздравляю всех с Новым Годом! Не отвлекал бы вас от Ваших важных дел в этот...

Параметризованный класс. Встроенные арифметические статические или динамические типы данных
Ошибка 1 error C4700: использована неинициализированная локальная переменная &quot;d&quot; Ошибка 6 error...

4
поисковый робот
30 / 23 / 9
Регистрация: 04.02.2020
Сообщений: 96
20.02.2020, 18:12 2
Цитата Сообщение от Иван__01 Посмотреть сообщение
Как сделать чтобы работало?)
а что там не работает ?

Цитата Сообщение от Иван__01 Посмотреть сообщение
C6385 Чтение недопустимых данных из "b"
это студийное предупреждение . можно игнорировать
или отключить, сделать

C++
1
2
3
4
5
6
#pragma warning(push)
#pragma warning(disable:6385)
 
.....  здесь код который 
 
#pragma warning(pop)
Добавлено через 3 минуты
Вот ошибка
вместо void нужен int
Цитата Сообщение от Иван__01 Посмотреть сообщение
void main()
1
Модератор
Эксперт С++
13330 / 10632 / 6352
Регистрация: 18.12.2011
Сообщений: 28,392
20.02.2020, 18:46 3
В исполнении программы не вижу ошибок:
Программа "[4976] test.exe" завершилась с кодом 0 (0x0).
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.02.2020, 21:26 4
Иван__01, зачем Вы объявили массивы размером N+1 а не N ? Вы не инициализируете элемент с индексом 0, но обращаетесь к элементу с таким индексом
for (k = 1; k <= N; k++) {
h[k] = x[k] - x[k - 1];
0
Эксперт С++
8738 / 4316 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.02.2020, 22:38 5
Цитата Сообщение от Иван__01 Посмотреть сообщение
Строки на которых горит ошибка:
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
#include <iostream>
#include <cstdio>
#include <cmath>
 
using namespace std;
 
int main() {
 
    double* x, * y, * h, * l, * delta, * lambda, * c, * d, * b;
    int N, /*n,*/ i, k;
 
    cout << " Size" << "\n" << " i = ";
    cin >> N;
 
    x = new double[N + 1];
    y = new double[N + 1];
    h = new double[N + 1];
    l = new double[N + 1];
    delta = new double[N + 1];
    lambda = new double[N + 1];
    c = new double[N + 1];
    d = new double[N + 1];
    b = new double[N + 1];
 
    for (i = 1; i <= N; i++)
    {
        x[i] = i;
        y[i] = pow(x[i], 2);
        cout << " X[" << i << "] = " << y[i] << "\t" << " Y[" << i << "] = " << y[i] << "\n";
    }
 
    for (k = 1; k <= N; k++) {
        h[k] = x[k] - x[k - 1];
        if (h[k] == 0) {
            printf("\nError, x[%d]=x[%d]\n", k, k - 1);
            return EXIT_SUCCESS;
        }
        l[k] = (y[k] - y[k - 1]) / h[k];
    }
    delta[1] = -h[2] / (2 * (h[1] + h[2]));
    lambda[1] = 1.5 * (l[2] - l[1]) / (h[1] + h[2]);
    for (k = 3; k <= N; k++) {
        delta[k - 1] = -h[k] / (2 * h[k - 1] + 2 * h[k] + h[k - 1] * delta[k - 2]);
        lambda[k - 1] = (3 * l[k] - 3 * l[k - 1] - h[k - 1] * lambda[k - 2]) /
            (2 * h[k - 1] + 2 * h[k] + h[k - 1] * delta[k - 2]);
    }
    c[0] = 0;
    c[N] = 0;
    for (k = N; k >= 2; k--) {
        c[k - 1] = delta[k - 1] * c[k] + lambda[k - 1];
    }
    for (k = 1; k <= N; k++) {
        d[k] = (c[k] - c[k - 1]) / (3 * h[k]);
        b[k] = l[k] + (2 * c[k] * h[k] + h[k] * c[k - 1]) / 3;
    }
 
    printf("\nA[k]\t\tB[k]\t\tC[k]\t\tD[k]\n");
    for (k = 1; k <= N; k++) {
        printf("%f\t%f\t%f\t%f\n", y[k], b[k], c[k], d[k]);
    }
 
    double start = x[1];
    double end = x[N];
    //double step = (end - start) / 20;
    /*for (double s = start; s <= end; s += step) {
        //find k, where s in [x_k-1; x_k]
        for (int k = 1; k <= N; k++) {
            if (s >= x[k - 1] && s <= x[k]) {
                break;
            }
        }
        double F = y[k] + b[k] * (s - x[k]) + c[k] * pow(s - x[k], 2) + d[k] * pow(s - x[k], 3);
        cout << s << "\t" << F << "\n";
    }*/
 
    cout << start << "\t" << end << "\n";
 
    delete[] x;
    delete[] y;
    delete[] h;
    delete[] l;
    delete[] delta;
    delete[] lambda;
    delete[] c;
    delete[] d;
    delete[] b;
}
0
20.02.2020, 22:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2020, 22:38
Помогаю со студенческими работами здесь

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

Создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых уже будут храниться различные типы данных
Мне нужно создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых...

Чтение из файла и другие типы данных
Доброго времени суток! Требуется написать программу, которая считывает из входного файла числа и...

Структурированные типы данных. Массивы С++
В двумерном массиве найти суммы S отрицательных элементов каждого столбца. Добавлено через 20...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru