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

Найти ошибку в программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить результаты выражений, не используя формулы сумм арифметической и геометрической прогрессии http://www.cyberforum.ru/cpp-beginners/thread1122232.html
Вычислить результаты выражений, не используя формулы сумм арифметической и геометрической прогрессии. V. По данному натуральному n вычислите сумму 1+2!+3!+...+n!. P.S.: Помогите пожалуйста
C++ Утечка памяти Помогите с кодом, вот написал реализацию стека по заданию. Преподаватель попросил проверить, верно ли я использую delete, ибо mas в классе и в stack в main выглядят по разному ^^" Пытался юзать VLD , но он не пашет, говорит не найден вход в процедуру. #include <iostream> using namespace std; class Stack { public: int *mas; int top; http://www.cyberforum.ru/cpp-beginners/thread1122223.html
Курсовая работа ООП C++
Всем привет! Пожалуйста,кто-нибудь,помогите с курсовой работой. Игра крестики-нолики (поле 10х10, X/O в ряд от 3 до 5) Все начинается с class <something>
C++ Если элемент исходной последовательности встречается один раз, то заменить его на 1, если несколько, то 0
1)В последовательности нет 0 и 1. Получить новую по следующей схеме: Если элемент исходной последовательности встречается один раз, то заменить его на 1, если несколько, то 0.
C++ Транзитивность.Связка.Есть код на PHP. Нужен C http://www.cyberforum.ru/cpp-beginners/thread1122208.html
Здравствуйте. Имеется известная задача связности. (Транзитивность) Установить связаны ли машины напрямую либо опосредованно,либо необходимо установить новое соединение. Имеется код на PHP. Кому нетрудно переведите на С.Хотя бы какието моменты. В частности ввод массива массивов и функции add,union . /** * Класс, отвечающий за поиск и объединение двух IP-адресов методом быстрого поиска */...
C++ Получение информации об ОС Есть программа которая показывает следующие функции: 1 Имя компьютера 2 Системная информация 3 Системные цвета 4 Директорию Windows Код программы: #include "stdafx.h" #include <windows.h> #include <stdio.h> подробнее

Показать сообщение отдельно
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
18.03.2014, 10:12     Найти ошибку в программе
Цитата Сообщение от tibeg Посмотреть сообщение
int i,j,a[3][3], b[3][3],a,b;
Ну во-первых вы объявляете a и b и как статический массив и как переменную типа int. Что уже не допустимо,а во вторых память под них должна выделяться динамически. Для двухмерных массивов память выделяется в 2 этапа: 1.Выделение памяти на массив указателей, 2.Выделение памяти на элементы. В обратной последовательности следует и освобождать. Существует несколько способов основными из которых являются конструкции типа: new/delete, malloc(calloc)/free. Существуют и другие способы (например отображение файлов в память), но они более специфичны и Вам пока туда не надо лезть. Конструкция malloc(calloc)/free перешла из Си, в то время как new/delete - это чистый С++. Основное отличие является то, что new/delete при создании и освобождении вызывает конструкторы/диструкторы объектов (если таковые есть. Malloc и calloc просто выделяют память на объект (calloc еще присваивает 0 объектам), поэтому их нельзя путать (new/delete и malloc(calloc)/free).
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
#include <iostream>
 
using namespace std;
 
int main()
{
        
    int i,j,**a, **b,a_с,b_с;
        
       cout << "Zadaite razmer matrici: ";
       cin >> a_с >>b_с;
       a=new int*[a_c];
       b=new int*[a_c];
    for(i=0;i<a_с;i++)
    {
     a[i]=new int[b_c];
     b[i]=new int[b_c];
    }
    for(i=0;i<a_с;i++)
    {
        for (j=0;j<b_с;j++)
        {
            cout << "[" << i+1 << "]" << "[" << j+1 << "]:";
            cin >> a[i][j];
        }
    cout << "\n";
 
    }
 
    cout <<"\nVasha matrica: \n";
    
    for(i=0;i<a_с;i++)
    {
        for (j=0;j<b_с;j++)
        {
            
            cout << a[i][j];
        }
        cout <<"\n";
    }
 
    for(j=0;j<a_с;j++)
    {
        for(i=0;i<b_с;i++)
            b[j][i]=a[i][j];
    }
 
     cout <<"\n";
 
     for(j=0;j<a_с;j++)
      {
        for(i=0;i<b_c;i++)
        {
            cout << b[j][i];
        }
        cout << "\n";
      }
    for(i=0;i<a_с;i++)
    {
     delete [] a[i];
     delete [] b[i];
    }
     delete [] a;
     delete [] b;
return 0;
}
второй вариант:
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
#include <iostream>
 
using namespace std;
 
int main()
{
        
    int i,j,**a, **b,a_с,b_с;
        
       cout << "Zadaite razmer matrici: ";
       cin >> a_с >>b_с;
       a=(int*) malloc(a_c*sizeof(int*));
       b=(int*) malloc(a_c*sizeof(int*));
    for(i=0;i<a_с;i++)
    {
     a[i]=(int) malloc(b_c*sizeof(int));
     b[i]=(int) malloc(b_c*sizeof(int));
    }
  
...........
 
    for(i=0;i<a_с;i++)
    {
     free (a[i]);
     free (b[i]);
    }
     free(a);
     free( b);
return 0;
}
Добавлено через 1 час 43 минуты
Во только в ваше случае правильнее так:
C++
1
2
3
4
5
6
7
8
9
10
11
       a=new int*[a_c];
       b=new int*[b_c];
    for(i=0;i<a_с;i++)   a[i]=new int[b_c];
     for(i=0;i<b_с;i++)  b[i]=new int[a_c];
....
for(i=0;i<a_с;i++)   delete [] a[i];
for(i=0;i<b_с;i++)  delete []b[i];
delete [] a;
delete [] b;
 
    }
Аналогично и с malloc, простите не посмотрел сразу внимательно что вы хотите. А те примеры допустимы только для квадратных матриц...
 
Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru