Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Shtolz
5 / 5 / 1
Регистрация: 10.10.2008
Сообщений: 138

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

20.09.2011, 15:17. Показов 2906. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2011, 15:17
Ответы с готовыми решениями:

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

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

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

28
 Аватар для Shtolz
5 / 5 / 1
Регистрация: 10.10.2008
Сообщений: 138
22.09.2011, 00:24  [ТС]
Че никто не знает что-ли?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
22.09.2011, 00:37
А где вызывается функция CheckBytes ?
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
22.09.2011, 04:49
1. Пересоздайте проект как Empty.
2. Транслируйте в режиме Release
Запустите без среды...
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 12:12
Shtolz, в твоём алгоритме банальный выход за пределы памяти отведенной под массивы. Как я понял дебагом пошёл за ошибкой и уже попал в какой-нибудь студийный срр, увидел что эта функция показывает ошибку и отписал сюдаПо свободе посмотрю где выход за пределы области памяти...

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

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

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ну да, уже б тогда &m_Temp[0] сделал, хотя врядли и это поможет
не, дак она все возвращает.
Программа отрабатывает нормально. Выполняет действия , печатает матрицу, а потом вылетает
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 12:32
Цитата Сообщение от 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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 12:36
Цитата Сообщение от Shtolz Посмотреть сообщение
а как тогда инициализировать временный объект?
- На счёт этого
Цитата Сообщение от Shtolz Посмотреть сообщение
MyMatrix& MyMatrix::Transp()
* * * * {
* * * * * * * * MyMatrix *mTemp = new MyMatrix(size);
-а он тебе нужен дополнительный двумерный масссив???Думаю целесообразней в исходной матрице менять столбцы со строками.Вод скрин Release - посыла от ОС в dbheap.c не идёт
Миниатюры
показывает вот сюда if (*pb++ != bCheck)  
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 12:40
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
Заблокирован
22.09.2011, 12:47
Shtolz, вопрос на засыпку: сколько раз в этой строке произошла утечка памяти?
C++
1
(A.Transp()*B-B*C).Print();
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 13:00
CAHTEXHUK, дело же не в ресурсозатратности программы, я уже об этом писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а он тебе нужен дополнительный двумерный масссив
а в том что free в Debug глючит
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 13:11
На миниатюрах скрин Debug и место в DBGHEAP.C о которое споткнулись вызывая free
Миниатюры
показывает вот сюда if (*pb++ != bCheck)   показывает вот сюда if (*pb++ != bCheck)  
1
Заблокирован
22.09.2011, 13:52
-=ЮрА=-, ну сначала я просто обратил внимание на серьёзный косяк, но при беглом просмотре выяснилось, что и косяк с 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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 14:20
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
Даю вторую подсказку: чтобы "free перестал глючить", необходим конструктор копирования.
Да не мне подсказывай, а ТС
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ага так тебе и вернёться инициализация при выделении памяти внутри блока, жди - не будет такого!
1
Заблокирован
22.09.2011, 14:44
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Я уже с таким встречался free иногда "гонит беса на пустом месте"
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CAHTEXHUK, дело же не в ресурсозатратности программы, я уже об этом писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Да не мне подсказывай, а ТС
epic fail, мне так непонятно кто из вас двоих - ты или ТС пытается кому помочь. ТС хотя бы не строит нелепых теорий и не вводит ими никого в заблуждение. Желание помочь конечно похвально, однако такая помощь смахивает на медвежью услугу
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 15:02
CAHTEXHUK, я тебя прошу уволь меня от разборок с тобой, (ну вот вы все лезите думаете дааа я умею кодировать, а вот ты тупой), так вот я решил проблемму топика в Release всё отрабатывает, потому что связывание идёт по другому,
2- е на старых версиях free студии (в 6-ке в которой пишу) действительно глючит, так же как и
C++
1
2
double val;
scanf("%lf",&val);
CAHTEXHUK, бросай офтоп и иди реально кому то помоги...
1
Заблокирован
22.09.2011, 15:14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
так вот я решил проблемму топика в Release всё отрабатывает, потому что связывание идёт по другому,
пфффф, это ты называешь решил проблему?! значит это нормально писать программы, работа которых зависит от настроения комилятора, операционной системы и ещё бог знает чего?

код который работает рандомно В РАЗЫ хуже кода, который вобще не работает, тебе об этом раскажет любой практикующий программист
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 15:22
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
код который работает рандомно В РАЗЫ хуже кода, который вобще не работает, тебе об этом раскажет любой практикующий программист
- вобще свой класс CMatrix по другому построил и что мне нужно было выкладывать его?Понятное дело постоянное выделение памяти под двумерный массив очень скоро загробит оперативку и заставит приложение опрокинуться. Проблемму решил так как понятно Shtolz, на его уровне

Не по теме:

PS:Будешь офтопить - уйдёшь в минус.:rtfm: Дай мне заниматься делом, а не разборками!

1
Заблокирован
22.09.2011, 15:52
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Проблемму решил так как понятно Shtolz
ты чё издеваешься? проблема напоминаю стоит что ТС дважды пытается повторно освободить память и один раз обращается к памяти, которая была освобожденна! значит как ты решил проблему - переключил с Debug на Release? Бога ради можешь писать как угодно свои программы, но давать подобные советы на форуме начинающим не надо ок? Проблему ты не только не решил, но ещё и усугубил и я уже объяснял почему - не работающий код лучше работающего через раз
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 16:10
CAHTEXHUK, говорю последний раз - в Release другой механизм линковки, если не понимаешь этого ну наверное , вот тебе Release - экзе и Скрин(как видишь алгоритм не отпал при 2-м вводе)
Миниатюры
показывает вот сюда if (*pb++ != bCheck)  
Вложения
Тип файла: rar BadMatrix.exe.rar (45.3 Кб, 6 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2011, 16:10
Помогаю со студенческими работами здесь

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

Вот такой вот error. Line too long (more than 1023 characters)
Отправляю запрос, а приходит BAD REQUEST answer := dk.PatchRequest('api/products/', j); В дебаггере посмотрел на длину...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты 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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru