Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Shtolz
5 / 5 / 0
Регистрация: 10.10.2008
Сообщений: 138
#1

показывает вот сюда if (*pb++ != bCheck) - C++

20.09.2011, 15:17. Просмотров 1559. Ответов 28
Метки нет (Все метки)

Здравствуйте =)
Проблема следующая

после работы вот этого кода

main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void _tmain(int argc, _TCHAR* argv[])
{
    MyMatrix A(2);
    A.Init();
 
    MyMatrix B(2);
    B.Init();
 
    MyMatrix C(2);
    C.Init();
 
    (A.Transp()*B-B*C).Print();
}
MyMatrix.cpp
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
#include "StdAfx.h"
#include "MyMatrix.h"
using namespace std;
 
MyMatrix::MyMatrix() 
    {
        arr = 0;
        size = 0;
    }
    
    MyMatrix::MyMatrix(int _size) 
    {
        arr = 0;
        size = _size;
        
        arr=(int**)malloc(size*sizeof(int*));
        for(int i=0; i<size; i++)
            arr[i]=(int*)malloc(size*sizeof(int));
    }
    
    void MyMatrix::Init()
    {
        for(int i=0;i<size;i++)
        {
            for(int j=0;j<size;j++)
            {
                cin>>arr[i][j];
            };
        };
    }
 
    void MyMatrix::Print()
    {
        int i,j;
        for(i=0;i<this->size;i++)
        {   
            cout<<"  \n";
            for(j=0;j<size;j++)
            {
                cout << arr[i][j]<<" ";
            };
        }
        cout <<" \n" ;
    }
    
    
    MyMatrix::~MyMatrix() 
    {
        if (arr)
        {
            for(int i=0; i<size; i++)
            {
                if (arr[i])
                    free(arr[i]);
            }
        free(arr);
        }
    }
 
    MyMatrix& MyMatrix::Transp()
    {
        MyMatrix *mTemp = new MyMatrix(size);
        
        for (int i=0;i<size;i++)
        {
            for(int j=0; j<size; j++)
            {
                mTemp->arr[i][j] = arr[j][i];
            }
        }
 
        return *mTemp;
    }
 
    MyMatrix& MyMatrix::operator *(MyMatrix M2)
    {
        MyMatrix *mTemp = new MyMatrix(size);
        for(int i=0;i<size;i++)
        {
            for(int j=0;j<size;j++)
            {
                mTemp->arr[i][j] = 0;
                for(int k=0;k<size;k++)
                {
                    mTemp->arr[i][j] += arr[i][k] * M2.arr[k][j];
                }
            }
        }
 
        return *mTemp;
    }
 
    MyMatrix& MyMatrix::operator -(MyMatrix M2)
    {
        MyMatrix *mTemp = new MyMatrix(size);
        
        for (int i=0;i<size;i++)
        {
            for(int j=0; j<size; j++)
            {
                mTemp->arr[i][j] = arr[i][j] - M2.arr[i][j];
            }
        }
 
        return *mTemp;
    }

выскакивает ошибка указывающая вот сюда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
extern "C" static int __cdecl CheckBytes(
        unsigned char * pb,
        unsigned char bCheck,
        size_t nSize
        )
{
        while (nSize--)
        {
      ->> if (*pb++ != bCheck)
            {
                return FALSE;
            }
        }
        return TRUE;
}
при чем уже после вывода готовой матрицы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2011, 15:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос показывает вот сюда if (*pb++ != bCheck) (C++):

Вот такое вот кажется лёгкое задание но не как не могу решить. - C++
задание 223(В,И)Картинки загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.

вот такой вот пример - C++
даны числа a1,a2,...,a10.Определить их сумму оператор цикла и условного оператора! как это ?

Как быть вот с этим (каким местом втыкать сюда клаву и мышь)? - Материнские платы
Интересно каким местом втыкать сюда клаву и мышь, это типа новые половинчатые разъёмы:

Установил Linux Mint 17.1 x32 и выходит вот такая вот штука - Linux
Уважаемые люди помогите кто сталкивался с такой проблемой Google не помогает опишу по подробней у меня два Винчестера Первый на 1 терабайт...

Нужно нарисовать вот такой вот дом на языке программирования QBasic - QBasic
Прошу очень Вашей помощи. Нужно нарисовать вот такой вот дом на языке программирования QBasic. В универе задали нарисовать дом в...

asp - xml - vb dll - html вот такая вот компания и что с ней делать - C# ASP.NET
как из асп создать хмл-файл, передающий информацию в vb-dll, там она анализируется и результат снова в виде html (asp)? я - чайник в...

28
Shtolz
5 / 5 / 0
Регистрация: 10.10.2008
Сообщений: 138
22.09.2011, 00:24  [ТС] #2
Че никто не знает что-ли?
0
Chelioss
181 / 181 / 4
Регистрация: 08.01.2011
Сообщений: 1,137
22.09.2011, 00:37 #3
А где вызывается функция CheckBytes ?
1
ValeryLaptev
Эксперт С++
1048 / 827 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
22.09.2011, 04:49 #4
1. Пересоздайте проект как Empty.
2. Транслируйте в режиме Release
Запустите без среды...
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 12:12 #5
Shtolz, в твоём алгоритме банальный выход за пределы памяти отведенной под массивы. Как я понял дебагом пошёл за ошибкой и уже попал в какой-нибудь студийный срр, увидел что эта функция показывает ошибку и отписал сюдаПо свободе посмотрю где выход за пределы области памяти...

Добавлено через 7 минут
Цитата Сообщение от Shtolz Посмотреть сообщение
MyMatrix *mTemp = new MyMatrix(size);
- ага так тебе и вернёться инициализация при выделении памяти внутри блока, жди - не будет такого!

Добавлено через 2 минуты
Цитата Сообщение от Shtolz Посмотреть сообщение
return *mTemp;
Ну да, уже б тогда &m_Temp[0] сделал, хотя врядли и это поможет
1
Shtolz
5 / 5 / 0
Регистрация: 10.10.2008
Сообщений: 138
22.09.2011, 12:24  [ТС] #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ага так тебе и вернёться инициализация при выделении памяти внутри блока, жди - не будет такого!
а как тогда инициализировать временный объект?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ну да, уже б тогда &m_Temp[0] сделал, хотя врядли и это поможет
не, дак она все возвращает.
Программа отрабатывает нормально. Выполняет действия , печатает матрицу, а потом вылетает
0
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 12:32 #7
Цитата Сообщение от Shtolz Посмотреть сообщение
не, дак она все возвращает.
Программа отрабатывает нормально. Выполняет действия , печатает матрицу, а потом вылетает
- Всё я разобрался - ошибка вылетает в деструкторе при Debug версии в Release Всё отрабатываетЯ уже с таким встречался free иногда "гонит беса на пустом месте". Единственное что переписал так єто Init() когда вводишь значения не разберёшь что ввводить в данный момент
C++
1
2
3
4
5
6
7
8
9
void MyMatrix::Init()
{
    for(int i=0,j;i<size;i++)
    for(j=0;j<size;j++)
    {
        cout<<"arr["<<i + 1<<"]["<<j + 1<<"] = ";
        cin>>arr[i][j]; 
    }
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 12:36 #8
Цитата Сообщение от Shtolz Посмотреть сообщение
а как тогда инициализировать временный объект?
- На счёт этого
Цитата Сообщение от Shtolz Посмотреть сообщение
MyMatrix& MyMatrix::Transp()
* * * * {
* * * * * * * * MyMatrix *mTemp = new MyMatrix(size);
-а он тебе нужен дополнительный двумерный масссив???Думаю целесообразней в исходной матрице менять столбцы со строками.Вод скрин Release - посыла от ОС в dbheap.c не идёт
1
Миниатюры
показывает вот сюда if (*pb++ != bCheck)  
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 12:40 #9
Shtolz, в заключение вот Matrix.h совмещённый с прототипами его методов(часто совмешаю при малом числе методов и функций класса+подключать удобней). Подключаешь его к main.cpp и всё бульше никаких инклов не нужно
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
#ifndef MATRIX
#define MATRIX
 
#include <iostream>
#include <cstdlib> //malloc
using namespace std;
 
class MyMatrix
{
private:
    int ** arr;
    int size;
public:
    MyMatrix();
    MyMatrix(int _size);
    ~MyMatrix();
    void Init();
    void Print();
    MyMatrix& Transp();
    MyMatrix& operator *(MyMatrix M2);
    MyMatrix& operator -(MyMatrix M2);
};
 
MyMatrix::MyMatrix() 
{
    arr = 0;
    size = 0;
}
        
MyMatrix::MyMatrix(int _size) 
{
    arr = 0;
    size = _size;
                
    arr=(int**)malloc(size*sizeof(int*));
    for(int i=0; i<size; i++)
        arr[i]=(int*)malloc(size*sizeof(int));
}
        
void MyMatrix::Init()
{
    for(int i=0,j;i<size;i++)
    for(j=0;j<size;j++)
    {
        cout<<"arr["<<i + 1<<"]["<<j + 1<<"] = ";
        cin>>arr[i][j]; 
    }
}
 
void MyMatrix::Print()
{
    for(int i=0,j;i<this->size;i++)
    { 
        for(j=0;j<size;j++)
            cout << arr[i][j]<<" ";
        cout <<" \n" ;
    }
}
        
MyMatrix::~MyMatrix() 
{
    if ((void *)arr != NULL)
    {
        for(int i=0; i<size; i++)
            if ((void *)arr[i] != NULL)
                free((void *)arr[i]);
        free((void *)arr);
    }
}
 
MyMatrix& MyMatrix::Transp()
{
    MyMatrix *mTemp = new MyMatrix(size);        
    for(int i=0,j;i<size;i++)
    for(j=0; j<size; j++)
        mTemp->arr[i][j] = arr[j][i];    
    return *mTemp;
}
 
MyMatrix& MyMatrix::operator *(MyMatrix M2)
{
    MyMatrix *mTemp = new MyMatrix(size);
    for(int i=0,j,k;i<size;i++)
    {
        for(j=0;j<size;j++)
        {
            mTemp->arr[i][j] = 0;
            for(k=0;k<size;k++)
                mTemp->arr[i][j] += arr[i][k] * M2.arr[k][j];
        }
    }
    return *mTemp;
}
 
MyMatrix& MyMatrix::operator -(MyMatrix M2)
{
    MyMatrix *mTemp = new MyMatrix(size);
    for (int i=0,j;i<size;i++)
    for(j=0; j<size; j++)
        mTemp->arr[i][j] = arr[i][j] - M2.arr[i][j];
    return *mTemp;
}
 
#endif
1
CAHTEXHUK
Заблокирован
22.09.2011, 12:47 #10
Shtolz, вопрос на засыпку: сколько раз в этой строке произошла утечка памяти?
C++
1
(A.Transp()*B-B*C).Print();
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 13:00 #11
CAHTEXHUK, дело же не в ресурсозатратности программы, я уже об этом писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а он тебе нужен дополнительный двумерный масссив
а в том что free в Debug глючит
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 13:11 #12
На миниатюрах скрин Debug и место в DBGHEAP.C о которое споткнулись вызывая free
1
Миниатюры
показывает вот сюда if (*pb++ != bCheck)   показывает вот сюда if (*pb++ != bCheck)  
CAHTEXHUK
Заблокирован
22.09.2011, 13:52 #13
-=ЮрА=-, ну сначала я просто обратил внимание на серьёзный косяк, но при беглом просмотре выяснилось, что и косяк с free тоже кроется в этой строчке. Даю вторую подсказку: чтобы "free перестал глючить", необходим конструктор копирования. Глючит пока только код, с free всё впорядке

Добавлено через 29 минут
C++
1
B*C
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        MyMatrix& MyMatrix::operator *(MyMatrix M2)
        {
                MyMatrix *mTemp = new MyMatrix(size);
                for(int i=0;i<size;i++)
                {
                        for(int j=0;j<size;j++)
                        {
                                mTemp->arr[i][j] = 0;
                                for(int k=0;k<size;k++)
                                {
                                        mTemp->arr[i][j] += arr[i][k] * M2.arr[k][j];
                                }
                        }
                }
 
                return *mTemp;
        }
побайтово делается копия С и его arr совпадает с arr оригинала, при выходе из оператора копия С уничтожается, но так arr у них общий то и содержимое С становится не валидным. При выходе из блока main вызывается деструктор для С, который пытается освободить уже освобождённую память
1
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 14:20 #14
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
Даю вторую подсказку: чтобы "free перестал глючить", необходим конструктор копирования.
Да не мне подсказывай, а ТС
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ага так тебе и вернёться инициализация при выделении памяти внутри блока, жди - не будет такого!
1
CAHTEXHUK
Заблокирован
22.09.2011, 14:44 #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Я уже с таким встречался free иногда "гонит беса на пустом месте"
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CAHTEXHUK, дело же не в ресурсозатратности программы, я уже об этом писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Да не мне подсказывай, а ТС
epic fail, мне так непонятно кто из вас двоих - ты или ТС пытается кому помочь. ТС хотя бы не строит нелепых теорий и не вводит ими никого в заблуждение. Желание помочь конечно похвально, однако такая помощь смахивает на медвежью услугу
1
22.09.2011, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2011, 14:44
Привет! Вот еще темы с ответами:

Microsoft edge открывает сам по себе браузер вот с таким вот сайтом thisgo.su/cgo - Удаление вирусов
Здравствуйтеб помогите пожалуйста с проблемойб microsoft edge открывает сам по себе браузер вот с таким вот сайтом thisgo.su/cgo ...

Как создать вот такой вот слайдер - HTML, CSS
Очень часто вижу, на сайте требуется создать вот такой вот 3d слайдер что ли, так вот как его делать понятия не приложу, опять плагин...

коллеги, возник вот такой вот трабл - Видеокарты
Привет коллеги, возникла вот такая вот проблема буквально на днях сгорела материнка с видяхой, к сожалению сейчас нет материальной...

Что сделать с вот такой вот кодировкой - C++ Builder
Тема выделена из темы: http://www.cyberforum.ru/cpp-builder/thread622714.html По поводу вызовов функций, и в других непонятных...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru