С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 19

HEAP CORRUPTION DETECTED: after normal block (#360) at 0x01085358

05.11.2023, 18:51. Показов 480. Ответов 9

Студворк — интернет-сервис помощи студентам
Всем привет!

Делаю лабораторную работу по SIMD-инструкциям процессора. Написал программу, работает, но при запуске вылезает ошибка как в заголовке, также приложил скриншот. Что это за ошибка и как я могу её исправить?

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
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <immintrin.h>  
 
const int N = 512;  
 
 
float rand_float() {
    return static_cast<float>(rand()) / RAND_MAX;
}
 
 
void matrix_multiply_simd(float** A, float** B, float** C) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            __m128 result = _mm_setzero_ps(); 
            for (int k = 0; k < N; k += 4) {
                __m128 a = _mm_load_ps(&A[i][k]);
                __m128 b = _mm_load_ps(&B[k][j]);
                result = _mm_add_ps(result, _mm_mul_ps(a, b)); 
            }
            _mm_store_ps(&C[i][j], result); 
        }
    }
}
 
 
void matrix_multiply_scalar(float** A, float** B, float** C) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            C[i][j] = 0.0;
            for (int k = 0; k < N; k++) {
                C[i][j] += A[i][k] * B[k][j]; 
            }
        }
    }
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    float** A = new float* [N];
    float** B = new float* [N];
    float** C_simd = new float* [N];
    float** C_scalar = new float* [N];
 
    for (int i = 0; i < N; i++) {
        A[i] = new float[N];
        B[i] = new float[N];
        C_simd[i] = new float[N];
        C_scalar[i] = new float[N];
    }
 
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            A[i][j] = rand_float();
            B[i][j] = rand_float();
        }
    }
 
 
    matrix_multiply_simd(A, B, C_simd);
 
    
    matrix_multiply_scalar(A, B, C_scalar);
 
    
    bool result_match = true;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (C_simd[i][j] != C_scalar[i][j]) {
                result_match = false;
                break;
            }
        }
        if (!result_match) {
            break;
        }
    }
 
    if (result_match) {
        std::cout << "Векторное умножение работает правильно." << std::endl;
    }
    else {
        std::cout << "Векторное умножение работает неправильно." << std::endl;
    }
 
    
    for (int i = 0; i < N; i++) {
        delete[] A[i];
        delete[] B[i];
        delete[] C_simd[i];
        delete[] C_scalar[i];
    }
    delete[] A;
    delete[] B;
    delete[] C_simd;
    delete[] C_scalar;
 
    std::cin.get();
 
    return 0;
}
Миниатюры
HEAP CORRUPTION DETECTED: after normal block (#360) at 0x01085358  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2023, 18:51
Ответы с готовыми решениями:

HEAP CORRUPTION DETECTED: after Normal block
добрый день. пишу небольшую програмку которая собирает данные про все файлы в папке(и файлы что лежат в папке в папке и т.д. в общем...

Heap corruption detected after normal block
выкидывает ошибку при попытке освободить память массива, делаю так: char **Items; ... free(Items);

heap corruption detected after normal block c++
Добрый день, программа выполняется правильно, но в конце выбивает ошибку heap corruption. Можете посмотреть, пожалуйста что не так ? ...

9
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,368
05.11.2023, 18:53
Цитата Сообщение от agfnv Посмотреть сообщение
как я могу её исправить?
Сначала найди, где она возникает. Для этого воспользуйся отладчиком.
0
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 19
05.11.2023, 18:56  [ТС]
Оно возникает, когда я очищаю память, вот здесь
C++
1
delete[] C_simd[i];
, но в чем проблема?
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,368
05.11.2023, 19:03
Цитата Сообщение от agfnv Посмотреть сообщение
но в чем проблема?
Не знаю. А читать твой код я не могу - глаза кровоточить начинают.


-----
Сделай выделение памяти под матрицу и удаление матрицы отдельными функциями.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
05.11.2023, 19:11
Цитата Сообщение от agfnv Посмотреть сообщение
Написал программу, работает, но при запуске вылезает ошибка как в заголовке
Так а как это вообще должно работать? SIMD инструкции потому так называются, что работают с группами данных. В частности _mm_load_ps и _mm_store_ps читают и записывают группы из четырех float значений в памяти.

Из этого сразу очевидно, что

C++
1
2
3
for (int j = 0; j < N; j++) {
  ...
  _mm_store_ps(&C[i][j], result);
будет вылетать за пределы массива размера N. Что вы и наблюдаете.

То есть вы открытым тексом вписали в свой код сразу бросающееся в глаза разрушение динамической памяти. Затем получили во время выполнения сообщение о разрушении динамической памяти. И спрашиваете, почему получается разрушение динамической памяти?
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,029
05.11.2023, 19:12
Цитата Сообщение от agfnv Посмотреть сообщение
Делаю лабораторную работу
там запрещают пользоваться вектором?
0
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 19
05.11.2023, 19:41  [ТС]
нет, не запрещают
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,368
05.11.2023, 19:58
Цитата Сообщение от agfnv Посмотреть сообщение
нет, не запрещают
Ну так фтопку тогда массивы.
0
05.11.2023, 20:39

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
А читать твой код я не могу - глаза кровоточить начинают.
Мне тоже не нравится стиль, который использовал ТС.
Но разве это проблема? Например, это исправляется за пару секунд в C::B. Вставляется код и нажимается в меню Plugins / Source code formatter (AStyle). IDE автоматически меняет стиль кода на тот, который был указан в Settings / Editor / Source Formatter.
Полагаю, что ваша IDE тоже так умеет.

0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,368
05.11.2023, 20:42
Цитата Сообщение от Royal_X Посмотреть сообщение
Мне тоже не нравится стиль, который использовал ТС.
Но разве это проблема? Например, это исправляется за пару секунд в C::B. Вставляется код и нажимается в меню Plugins / Source code formatter (AStyle). IDE автоматически меняет стиль кода в тот, которые был указан в Settings / Editor / Source Formatter.
Полагаю, что ваша IDE тоже так умеет.
Мне проще закрыть вкладку в браузере.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2023, 20:42
Помогаю со студенческими работами здесь

heap corruption detected after normal block
Помогите пожалуйста решить проблему. Мне нужно реализовать перемену мест элементов массива т.е: Входные данные: 4 1 2 3 4 ...

heap corruption detected after normal block
int nStringNumber; std::cout &lt;&lt; &quot; Input Number of Strings &gt;&gt;&quot;; std::cin &gt;&gt; nStringNumber; const char* STOP_STRING = &quot;*&quot;; char*...

Heap corruption detected after normal block #980
Здравствуйте! Нужна ваша помощь. Как я понимаю, ошибка возникает во время работы функции Deriv(), но мне не понятно почему она возникает....

Heap corruption detected: after normal block (#153) at 0x00345730
#ifndef COW_H__ #define COW_H__ class Cow { char name; char *hobby; double weight; static int num;// chislo obektov

Heap corruption detected after normal block (#276) at 0x017D5DD0
Выдает ошибку &quot;heap corruption detected after normal block (#276) at 0x017D5DD0&quot;, когда пытаюсь после заполнения матрицы зигзагом (Z)...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru