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

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

20.09.2011, 15:17. Показов 3331. Ответов 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
Заблокирован
22.09.2011, 16:27
Студворк — интернет-сервис помощи студентам
товарищ, какие режимы линковки? это UB! никто не гарантирует, что в следующий раз программа не выпадет в синий экран и отформатирует тебе жёсткий диск. Программа падает совсем не из-за того что глючит free, виндус или скайнет, free работает правильно, ошибку выдаёт по делу. Кончай уже втирать эту байку про чудодейственный Release и отстойный Debug, а иди исправляй свои программы, потому что судя по этому сообщению там есть, что исправлять:
Я уже с таким встречался free иногда "гонит беса на пустом месте"
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 16:46
Цитата Сообщение от LosAngeles Посмотреть сообщение
что в следующий раз программа не выпадет в синий экран и отформатирует тебе жёсткий диск.
- это тебе
Цитата Сообщение от LosAngeles Посмотреть сообщение
иди исправляй свои программы, потому что судя по этому сообщению там есть, что исправлять
- раз такое пишешь и не понимаешь различий Debug и Release иди сам учи язык, а на счёт этого ты 100% уверен что free всегда отрабатывает - мой ответ конечно же нет!

Добавлено через 2 минуты
LosAngeles, мой экзешник вылетел, выпал в синий экран я жду примеров, а то бросаешся тяжеовесными выссказываниями, ну давай уж приведи пример некорректной работы, я жду...
1
Заблокирован
22.09.2011, 16:59
человек который дважды удаляет память по одному указателю и обращается к освобождённой памяти решает эту проблему изменив опции компиляции и советует мне при этом идти учить язык... У меня остался только один вопрос - ты мастер-классы проводишь?
1
Заблокирован
22.09.2011, 17:03
АХАХАХА!!! решил проверить, хотя впринципе и так ясно что код полное говно. Просто проверить заработает или нет. Первый запуск, прилагаю скриншоты
Миниатюры
показывает вот сюда if (*pb++ != bCheck)   показывает вот сюда if (*pb++ != bCheck)  
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 17:18
Цитата Сообщение от LosAngeles Посмотреть сообщение
АХАХАХА!!! решил проверить, хотя впринципе и так ясно что код полное говно.
LosAngeles,
LosAngeles, ты вобще смотре кто ТС и о чьём коде говорим, мне твой компилятор в Debug не нужен что ты скрины кидаешь, о которых уже 15 постов назад сказал показывает вот сюда if (*pb++ != bCheck)

Добавлено через 2 минуты

Не по теме:

LosAngeles, или разберись в топике или млин не рви мне мозг



Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а в том что free в Debug глючит
по поводу сего вот єто имел ввиду а в том что free в ряде случаев(особенно на старых компиляторах) в Debug глючит...

LosAngeles, это тебе, я специально ввёл try catch в деструкторе, компилируй, вводи маттрицы запускай, ну что вылетело исключение, ммм?!!Да провожу прям сейчас
Цитата Сообщение от LosAngeles Посмотреть сообщение
ты мастер-классы проводишь?
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 "MyMatrix.h"
#include <windows.h>
 
LPSTR StrWinError(HRESULT hRes)
{
    LPSTR errString = NULL;  // will be allocated and filled by FormatMessage
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM, // use windows internal message table
        0,       // 0 since source is internal message table
        hRes,    // this is the error code 
                          // Could just as well have been an error code from generic
                          // Windows errors from GetLastError()
        0,       // auto-determine language to use
        (LPSTR)&errString,
        0,       // min size for buffer
        0 ); 
    return errString;
}
 
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() 
{
    try
    {
    if ((void *)arr != NULL)
    {
        for(int i=0; i<size; i++)
            if ((void *)arr[i] != NULL)
                free((void *)arr[i]);
        free((void *)arr);
    }
    }
    catch(...)
    {
        MessageBox(NULL,StrWinError(GetLastError()),"TRYCATCH",MB_OK);
    }
}
 
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;
}
MyMatrix.h
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
#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);
};
 
#endif
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
#include "MyMatrix.h"
#include <conio.h>
 
void main()
{
    do
    {
        MyMatrix A(2);
        std::cout<<"Init A\r\n";
        A.Init();
 
        MyMatrix B(2);
        std::cout<<"Init B\r\n";
        B.Init();
 
        MyMatrix C(2);
        std::cout<<"Init C\r\n";
        C.Init();
 
 
        (A.Transp()*B-B*C).Print();
        cout<<"Press Y - to new input\r\n";
    }
    while(toupper(getch()) == 'Y');
}
0
Заблокирован
22.09.2011, 17:19
-=ЮрА=-, с каких пор free выбрасывает С++ные исключения?! к слову сказать delete объявлен с пустой спецификацией исключений и тоже не выбрасывает исключений

Что именно тебе непонятно:
1) Ты не видишь, что память освобождается дважды? а также идёт обращение к освобождённой памяти?
2) Видишь, но считаешь что это вполне нормально и решается с помощью переключения опций компиляции?
если первое я могу попытаться объяснить почему это так, хотя тут всё доходчиво написано показывает вот сюда if (*pb++ != bCheck)
а если второе то это no comments вобще

Добавлено через 43 секунды
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты вобще смотре кто ТС и о чьём коде говорим, мне твой компилятор в Debug не нужен
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
LosAngeles, Release поставь
ты вобще скрин смотришь? там Release версия!
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 17:35
Цитата Сообщение от LosAngeles Посмотреть сообщение
2) Видишь, но считаешь что это вполне нормально и решается с помощью переключения опций компиляции?
- я думаю в случае Release, здесь if ((void *)arr != NULL) скорее всего arr == NULL(т.к. память некорректно выделяется) и free в деструкторе вообще не вызывается!
Сначала однин, теперь другой, не рвите мне мозг!ТС удовлетворился, потому что не в 10-ке пишет и там трюки с Releas-ом проходят. Уже писал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- вобще свой класс CMatrix по другому построил и что мне нужно было выкладывать его?Понятное дело постоянное выделение памяти под двумерный массив очень скоро загробит оперативку и заставит приложение опрокинуться. Проблемму решил так как понятно Shtolz, на его уровне
0
Заблокирован
22.09.2011, 17:56
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и free в деструкторе вообще не вызывается!
то есть ты не понял, что free вызывается дважды для одного и того же адреса. Окей, а то я уже подумал, что ты пытаешься протолкнуть идею, что это нормально освобождать память по одному адресу дважды. В посте сантехника же написано почему это происходит пошагово, что именно в нём непонятно? Проблема возникает в том что в операторах * и - создаётся копия матрицы, которая содержит тот же arr, что и оригинал. Копия уничтожается, делая оригинал недействительным, адрес указателя не обнуляется, а остаётся тем же. Затем при выходе из _tmain вызывается деструктор для оригинала, который содержит невалидный указатель. Что будет если попытаться освободить память по указателю, который указывает на мусор? ЭТО И БУДЕТ!!! Проблема сразу исчезает, если написать конструктор копирования

Добавлено через 4 минуты
и кстати если в эти самые операторы передавать матрицы по ссылке, а не по значению, то глюк тоже пройдёт. Но этот способ ничем не лучше переключения на Release версию, это я так к слову сказал, чтобы ещё раз обратить внимание на то, что глюк именно в отстутсвии КК, если кто-то ещё не понял
0
 Аватар для Shtolz
5 / 5 / 1
Регистрация: 10.10.2008
Сообщений: 138
23.09.2011, 16:35  [ТС]
Всем спасибо!! и отдельно CAHTEXHUK, за объяснение ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2011, 16:35

Вот такое вот кажется лёгкое задание но не как не могу решить.
задание 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 слайдер что ли, так вот как его делать понятия не приложу, опять плагин...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru