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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Qeeet
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
#1

Ошибка: Run-time check failure: variable 'C' is being used without being initialized - C++

04.02.2013, 20:29. Просмотров 1269. Ответов 22
Метки нет (Все метки)

Здравствуйте,
Помогите решить одну проблему. Есть задание написать программу, которая находит определитель матрицы и умножает две матрицы, введенные з клавиатуры.
В процесе решения задачи наткнулся на следующую проблему. После компиляции в строке 74 IDE выдает ошибку "Run-time check failure: variable 'C' is being used without being initialized".
По разному пробовал исправить, не получаеться никак.

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
 
class macierz
{
    void create_table();
    int rows;
    int columns;
public:
    int getc(){return columns;}
    int getr(){return rows;}
    macierz(int,int);
    macierz();
    ~macierz();
    float **cells;
};
 
//заполнение матрицы, если вызвана функцией
macierz::macierz(int a,int b)
{
    rows=a;
    columns=b;
    create_table();
}
 
//Заполнение матрицы вручную
macierz::macierz()
{
    cout<<"Количество строк матрицы = ";
    cin>>rows;
    cout<<"Количество столбцов матрицы = ";
    cin>>columns;
    create_table();
    for(int i=0;i<rows;i++){
        for(int j=0;j<columns;j++){
            cout<<"a("<<i+1<<","<<j+1<<") = ";
            cin>>cells[i][j];
    }}
}
 
//Освобождение памяти
macierz::~macierz()
{
    for(int i=0;i<rows;i++)
        delete []cells[i];
    delete []cells;
}
 
//Выделение памяти под матрицу
void macierz::create_table()
{
    cells=new float*[rows];
    for(int i=0;i<rows;i++)
        cells[i]=new float[columns];
    }
 
//Функция умножения двох матриц. Функция недоделана
macierz func(macierz A,macierz B)
{
    macierz C(A.getr(),B.getc());
    return C;
}
 
void main()
{
    macierz *A,*B,*C=NULL;//macierz&rC=*C;
    cout<<"Матрица A:"<<endl;
    A=new macierz;
    cout<<"Матрица B:"<<endl;
    B=new macierz;
    *C=func(*A,*B);
    getchar();getchar();getchar();
}
2. Второй вопрос. Что значит или как трактовать ":" после CSome( int size )?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class CSome
{
public:
  CSome( int size ) : p( 0 ), sz( size ) { p = new int[a]; }
  ~CSome() { delete p; }
...
  operator int*() { return p; }
  operator const int*() const { return p; }
 
private:
  int* p;
  int  sz;
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 20:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка: Run-time check failure: variable 'C' is being used without being initialized (C++):

Ошибка Run-Time Check Failure #3 - The variable 'k' is being used without being initialized - C++
2. Даны два вектора и найти угол между ними и модуль векторного произведения векторов X и Y. При вычислении использовать формулу: , где...

Ошибка: Run-Time Check Failure #3 - The variable 'zero' is being used without being initialized. - C++
int fun_mult(int *mas) { int zero; for (int i=0; i&lt;10; i++){ if (mas=0) zero=i; else break; }

Ошибка: Run-Time Check Failure #3 - The variable 'i' is being used without being initialized - C++
в чём ошибка (просьба подправить) #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace...

Ошибка Run-Time Check Failure #3 - The variable 'y' is being used without being initialized - C++
Выскакивает вот тавкая вот ошибка, подскажите как исправить. Ошибка выскакивает, когда я ввожу переменную &quot;e&quot;, уже во время отладки...

Ошибка Run-Time Check Failure #3 - The variable 'chcount' is being used without being initialized. - C++
Run-Time Check Failure #3 - The variable 'chcount' is being used without being initialized. Что за ошибка?

Run-Time Check Failure #3 - The variable 'k' is being used without being initialized - C++
Дано целое число n&gt;1 . Найти наименьшее целое число k , при котором выполняется неравенство k&gt;n^2+n #include&lt;iostream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
abit
263 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 730
04.02.2013, 20:54 #2
Второй вопрос. Что значит или как трактовать ":" после CSome( int size )?
это конструктор по умолчанию

если создашь объект класса например так
CSome A = 100; (или аналогично CSome A(100)

он для этого объекта A установит внутренний p в ноль, sz в 100 и выделит память под массив ({p = new int[a];}

попробуйте
macierz C = func(*A,*B);
а это - ",*C=NULL" уберите
0
Qeeet
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
04.02.2013, 23:34  [ТС] #3
Цитата Сообщение от abit Посмотреть сообщение
это конструктор по умолчанию

если создашь объект класса например так
CSome A = 100; (или аналогично CSome A(100)

он для этого объекта A установит внутренний p в ноль, sz в 100 и выделит память под массив ({p = new int[a];}
спасибо большое, кажеться понял

Цитата Сообщение от abit Посмотреть сообщение
попробуйте
macierz C = func(*A,*B);
а это - ",*C=NULL" уберите
компилится, код работает, но при выходе из функции void main() вылетает с ошибкой:
"Необработанное исключение в "0x511865ca (msvcr100d.dll)" в "задание.ехе": 0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"." IDE кидает меня на какойто dbgdel.cpp, на строку "_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));"
как это исправить?
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:28 #4
Цитата Сообщение от Qeeet Посмотреть сообщение
После компиляции в строке 74 IDE выдает ошибку "Run-time check failure: variable 'C' is being used without being initialized".
Странно... microsoft visual studio 2008 всё прекрасно компилируется....
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
05.02.2013, 01:38 #5
C++
1
~CSome() { delete []p; }
иначе удаляете лишь первый элемент массива.

Добавлено через 1 минуту
Цитата Сообщение от Qeeet Посмотреть сообщение
C++
1
int getc(){return columns;}
getc - уже существует такая стандартная функция
http://www.cplusplus.com/reference/cstdio/getc/

Добавлено через 2 минуты
Цитата Сообщение от Qeeet Посмотреть сообщение
C++
1
2
3
4
5
6
//Функция умножения двох матриц. Функция недоделана
macierz func(macierz A,macierz B)
{
* * macierz C(A.getr(),B.getc());
* * return C;
}
переменная С уничтожается при выходе из тела функции, т.о. потом будет идти работа с мусором

Добавлено через 17 секунд
Цитата Сообщение от Qeeet Посмотреть сообщение
void main()
по стандарту int main
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:40 #6
Цитата Сообщение от MrGluck Посмотреть сообщение
C++
1
~CSome() { delete []p; }
иначе удаляете лишь первый элемент массива.

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

getc - уже существует такая стандартная функция
http://www.cplusplus.com/reference/cstdio/getc/
Не соглашусь с Вами. Многие компиляторы отличают массив от единичной переменной.

C++
1
2
3
4
5
6
7
8
9
void main()
{
    char *ptr;
    while(1)
    {
        ptr = new char[1000000];
        delete ptr;
    }
}
У меня данный код не вызывает утечки памяти. НО я соглашусь с Вами, в том что лучше использовать стандарт C++, не стоит полагаться на компилятор
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
05.02.2013, 01:42 #7
Цитата Сообщение от Пёс Посмотреть сообщение
Не соглашусь с Вами. Многие компиляторы отличают массив от единичной переменной.
как раз таки компилятор при удалении не отличает, delete или delete [] надо вызывать
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:45 #8
Цитата Сообщение от MrGluck Посмотреть сообщение
как раз таки компилятор при удалении не отличает, delete или delete [] надо вызывать
как же Вы тогда объясните отстутствие утечки в вышеприведенном коде? Проверял на MVS 2008. MinGW кстати тоже компилирует этот код без утечек.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
05.02.2013, 01:51 #9
Цитата Сообщение от Пёс Посмотреть сообщение
компилирует этот код без утечек.
компилятор не может отлавливать утечку памяти, это делают другие программы
5.3.5 If the operand has a class type, the operand is converted to a pointer type by calling the above-mentioned conversion function, and the converted operand is used in place of the original operand for the remainder of
this section. In the first alternative (delete object), the value of the operand of delete may be a null pointer
value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8)
representing a base class of such an object (Clause 10). If not, the behavior is undefined.
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:54 #10
MrGluck, какие программы? сомневаюсь что студия следит за тем, что нужно удалять.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
05.02.2013, 01:55 #11
Цитата Сообщение от Пёс Посмотреть сообщение
MrGluck, какие программы? сомневаюсь что студия следит за тем, что нужно удалять.
именно, это должен делать программист.
Ну и на студии жизнь не заканчивается.
valgrind, например.
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 02:01 #12
Я согласен в том, что лучше писать delete[] когда работаем с массивом, но объясните мне почему тот код не вызывает утечку?
0
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 02:03 #13
Насколько я помню : основная разница между двумя операторами в том, что delete[] вызовет деструкторы цепочки обьектов, а delete только первого.
2
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
05.02.2013, 02:06 #14
форма delete действительно определяется количеством вызываемых деструкторов, однако, как я писал выше, ссылаясь на стандарт, использование неодинаковых форм new и delete приводит к undefined behaviour
Ошибка: Run-time check failure: variable 'C' is being used without being initialized
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 02:15 #15
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Насколько я помню : основная разница между двумя операторами в том, что delete[] вызовет деструкторы цепочки обьектов, а delete только первого.
Респект! Спасибо, я проверил на опыте, это действительно так.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 02:15
Привет! Вот еще темы с ответами:

Run-Time Check Failure #3 - The variable 'c' is being used without being initialized - C++
Вводится последовательность целых чисел. Для каждого числа последовательности проверить, представляют ли его цифры строго ...

Run-Time Check Failure #3 - The variable 'c' is being used without being initialized - C++
VS 2013 После введения знака выдает такую ошибку Как можно исправить? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using...

Run-Time Check Failure #3 - The variable 's' is being used without being initialized - C++
Ребят в чем может быть косяк запарился уже. Выдает эту ошибку я хз что с ней делать:( #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...

C++ - Run-Time Check Failure #3 - The variable 'c' is being used without being initialized - C++
Нужно исправить код. Вводится последовательность целых чисел. Для каждого числа последовательности проверить, представляют ли его цифры...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.02.2013, 02:15
Ответ Создать тему
Опции темы

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