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

Не работает деструктор и ошибка при использовании SSE-команд. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Считывание с файла http://www.cyberforum.ru/cpp-beginners/thread385777.html
Нужно считать с текстового файла числа не зная их количество, вроде не сложно, но как не пробую считывает бред какой то. Кто нить помогите, надо срочно
C++ Проверить, соблюдается ли равенство открывающихся и закрывающихся скобок Всем добрый день) вот такая задача привела меня в ступор: "Проверить, соблюдается ли равен¬ство открывающихся и закрывающихся скобок. Если равенство соблюдается, то вывести соответствующее сообщение, в противном случае вывести количество открывающихся и закрывающихся скобок. ((ln|sinx|)^(1/3))/((e^(a+b)) + 1) " кто знает прошу помочь,заранее спасибо) http://www.cyberforum.ru/cpp-beginners/thread385774.html
C++ процедурные функции
описать процедуру Bell(A,N),меняющую порядок элементов массива A размера N на следущие: наимньший элемент массива распологается на первом мнсте, наименьший из оставшихся элементов на последнем, следующий по величине располагается на втором месте, следующий на предпоследнем ит.д.(в резултате график будет напоминать колокол). массив A является входным и выходным параметром. с помощю этой процедуры...
C++ Функции и файлы в C++
Для хранения данных о ноутбуках описать структуру вида (при необходимости дополнить ее): struct NOTEBOOK { struct disp_res { // разрешающая способность дисплея int x; // по горизонтали int y; // по вертикали
C++ Разность произвольных чисел http://www.cyberforum.ru/cpp-beginners/thread385740.html
Как решить разность произвольных чисел? Длинная арифметика. Есть пример "Сумма двух положительных чисел" её надо переделать в разность, которую я не могу сделать. :( #include <iostream> #include <string> using namespace std; int a , b, c; void vvod(int a) { int i, len; string s; cin>>s; len=s.length(); a=len;
C++ Залипающие манипуляторы У меня следующий вопрос. До каких пор эти манипуляторы (например setfill) залипают? Имеется в виду следующее. Допустим я в некоторой функции воспользовался одним из таких залипающих манипуляторов. Функция завершилась. А вот теперь продолжится ли залипание или на этом конец. Грубо говоря, какова область залипания этих манипуляторов? Заодно, если можно поясните плиз, вот этот объекты cout и ... подробнее

Показать сообщение отдельно
pr0z
Сообщений: n/a
17.11.2011, 10:50     Не работает деструктор и ошибка при использовании SSE-команд.
Написал класс матрицы, начал писать деструктор - начало вылазить сообщение об ошибке вида "Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)". Убираю деструктор - все работает.
Что касается SSE - написал метод суммирования матриц с его использованием, но при использовании самой SSE-функции вылазит ошибка: "Необработанное исключение в "0x00fb18db" в "matr.exe": 0xC0000005: Нарушение прав доступа при чтении "0xffffffff"." В чем может быть проблема?
Вот код программы:
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*matrix.h*/
#include "Windows.h"
#include <iostream>
#include <tchar.h>
#include <time.h>
#include <intrin.h>
 
class Matrix
{
public:
    float *a;
    size_t n;
 
    Matrix(size_t n);
    Matrix (size_t n, const float *a);
    Matrix (Matrix *other);
    void Mul(Matrix m1, Matrix m2);
    void mmMul(Matrix m1, Matrix m2);
    void Sum(Matrix m1, Matrix m2);
    void mmSum(Matrix m1, Matrix m2);
    void Sub(Matrix m1, Matrix m2);
    void mmSub(Matrix m1, Matrix m2);
    void Print();
    /*~Matrix();*/
};
 
/*matrix.cpp*/
#include "matr.h"
#define SIZE 10
 
Matrix::Matrix(size_t n)
    {
        this->n = n;
        a = new _declspec(align(16)) float[n*n];
    }
 
Matrix::Matrix (size_t n, const float *a)
    {
        this->n = n;
        this->a = new _declspec(align(16)) float[n*n];
        memcpy(this->a, a, n*n*sizeof(a[0]));
    }
 
Matrix::Matrix (Matrix *other)
    {
        this->n = other->n;
        this->a = new _declspec(align(16)) float[this->n*this->n];
        memcpy(this->a, other->a, n*n*sizeof(this->a[0]));
    }
 
//Matrix::~Matrix()
//{
//  delete []a;
//}
 
void Matrix::Mul(Matrix m1, Matrix m2)
{
    float tmp = 0;
    for(int i = 0; i < (int)m1.n; ++i)
    {
        for(int k = 0; k < (int)m1.n; ++k)
        {
            tmp = 0;
            for(int j = 0; j < (int)m1.n; ++j)
            {
                tmp += m1.a[m1.n*i + j]*m2.a[m1.n*j + k];
            }
            this->a[m1.n*i + k] = tmp;
        }
    }
}
 
void Matrix::Sum(Matrix m1, Matrix m2)
{
    for(int i = 0; i < (int)(m1.n*m1.n); ++i)
    {
        this->a[i] = m1.a[i] + m2.a[i];
    }
}
 
void Matrix::mmSum(Matrix m1, Matrix m2)
{
    int arrSize = this->n*this->n;
    int Counter = arrSize/4;
    __m128* pm1 = (__m128*)m1.a;
    __m128* pm2 = (__m128*)m2.a;
    __m128* pthis = (__m128*)this->a;
    for(int i = 0; i < Counter; ++i)
        pthis[i] = _mm_add_ps(pm1[i], pm2[i]);
    if(arrSize%4 != 0)
    {
        int tmp = arrSize%4;
        for(int i = arrSize - tmp; i < arrSize; ++i)
            this->a[i] = m1.a[i] + m2.a[i];
    }
}
 
void Matrix::Sub(Matrix m1, Matrix m2)
{
    for(int i = 0; i < (int)(m1.n*m1.n); ++i)
    {
        this->a[i] = m1.a[i] - m2.a[i];
    }
}
 
void Matrix::Print()
{
    for(int i = 0; i < (int)n; ++i)
    {
        for(int j = 0; j < (int)n; ++j)
        {
            _tprintf(_T("%f\t"), this->a[n*i+j]);
        }
        _tprintf(_T("\n"));
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru