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

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

20.09.2011, 15:17. Показов 2910. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru