Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14

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

04.02.2013, 20:29. Показов 2888. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2013, 20:29
Ответы с готовыми решениями:

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

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

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

22
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
04.02.2013, 20:54
Второй вопрос. Что значит или как трактовать ":" после 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
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
04.02.2013, 23:34  [ТС]
Цитата Сообщение от 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
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:28
Цитата Сообщение от Qeeet Посмотреть сообщение
После компиляции в строке 74 IDE выдает ошибку "Run-time check failure: variable 'C' is being used without being initialized".
Странно... microsoft visual studio 2008 всё прекрасно компилируется....
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 01:38
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
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:40
Цитата Сообщение от 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
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 01:42
Цитата Сообщение от Пёс Посмотреть сообщение
Не соглашусь с Вами. Многие компиляторы отличают массив от единичной переменной.
как раз таки компилятор при удалении не отличает, delete или delete [] надо вызывать
0
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:45
Цитата Сообщение от MrGluck Посмотреть сообщение
как раз таки компилятор при удалении не отличает, delete или delete [] надо вызывать
как же Вы тогда объясните отстутствие утечки в вышеприведенном коде? Проверял на MVS 2008. MinGW кстати тоже компилирует этот код без утечек.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 01:51
Цитата Сообщение от Пёс Посмотреть сообщение
компилирует этот код без утечек.
компилятор не может отлавливать утечку памяти, это делают другие программы
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
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 01:54
MrGluck, какие программы? сомневаюсь что студия следит за тем, что нужно удалять.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 01:55
Цитата Сообщение от Пёс Посмотреть сообщение
MrGluck, какие программы? сомневаюсь что студия следит за тем, что нужно удалять.
именно, это должен делать программист.
Ну и на студии жизнь не заканчивается.
valgrind, например.
0
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 02:01
Я согласен в том, что лучше писать delete[] когда работаем с массивом, но объясните мне почему тот код не вызывает утечку?
0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 02:03
Насколько я помню : основная разница между двумя операторами в том, что delete[] вызовет деструкторы цепочки обьектов, а delete только первого.
2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 02:06
форма delete действительно определяется количеством вызываемых деструкторов, однако, как я писал выше, ссылаясь на стандарт, использование неодинаковых форм new и delete приводит к undefined behaviour
Ошибка: Run-time check failure: variable 'C' is being used without being initialized
0
 Аватар для Пёс
229 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
05.02.2013, 02:15
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Насколько я помню : основная разница между двумя операторами в том, что delete[] вызовет деструкторы цепочки обьектов, а delete только первого.
Респект! Спасибо, я проверил на опыте, это действительно так.
0
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
05.02.2013, 02:53  [ТС]
всем спасибо за дискусии, решил проблему следующим способом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void func(macierz A,macierz B,macierz&cC)
{
    //macierz C(A.getr(),B.getc());
    cC.cells[0][0]=23;
    cout<<A.getr()<<B.getc()<<cC.cells[0][0];//getchar();getchar();
    //return C;
}
 
void main()
{
    macierz *A,*B;//,*C;//macierz&rC=*C;
    cout<<"Macierz A:"<<endl;
    A=new macierz;
    cout<<"Macierz B:"<<endl;
    B=new macierz;
    //C=new macierz(A->getr(),B->getc());
    macierz *C=new macierz(A->getr(),B->getc());
    func(*A,*B,*C);
    //macierz C=func(*A,*B);
    getchar();getchar();getchar();
}
abit, не могу спасибки поставить, кнопка отсутствует
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 02:57
Qeeet, вы память выделяете, но не очищаете.
И по стандарту
3.6.1 Main function
2) An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int, but otherwise its type is implementation-defined. All implementations shall
allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
In the latter form argc shall be the number of arguments passed to the program from the environment
in which the program is run. If argc is nonzero these arguments shall be supplied in argv[0]
through argv[argc-1] as pointers to the initial characters of null-terminated multibyte strings (ntmbs
s) (17.5.2.1.4.2) and argv[0] shall be the pointer to the initial character of a ntmbs that represents the
name used to invoke the program or "". The value of argc shall be non-negative. The value of argv[argc]
shall be 0.
main must have int return statement!

Добавлено через 28 секунд
C++
1
2
3
delete A;
delete B;
delete C;
1
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
05.02.2013, 03:19  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Qeeet, вы память выделяете, но не очищаете.
И по стандарту

main must have int return statement!

Добавлено через 28 секунд
C++
1
2
3
delete A;
delete B;
delete C;
с очисткой памяти понятно. Но зачем main должна быть всегда int, непонятно
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.02.2013, 03:21
Qeeet, я же вам стандарт процитировал. Делается все это для того, чтобы ОС знала, как завершилась программа. Ведь, возможно, данные из неё могут впоследствии использоваться в следующей, вызываемой из конвейера.
2
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
05.02.2013, 04:34  [ТС]
у меня возникла проблема с матрицей которая была создана конструктором macierz::macierz(int,int). ячейки этой матрицы не пусты.
я добавил в код функцию присвоения всем ячейкам матрицы значения 0, но функция не работает почемуто. До cout'а не доходит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void macierz::clear_macierz()
{
    for(int i=0;i>rows;i++)
        {for(int j=0;j>columns;j++)
    {cells[i][j]=0;cout<<"ololo";}}
}
 
macierz::macierz(int a,int b)
{
    rows=a;
    columns=b;
    create_table();
    clear_macierz();
}
Добавлено через 9 минут
помогите очистить матрицу любым способом неручным, и желательно в класе.
Время поджимает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2013, 04:34
Помогаю со студенческими работами здесь

Ошибка: Run-Time Check Failure #3 - The variable 'zero' is being used without being initialized.
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 'chcount' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'chcount' is being used without being initialized. Что за ошибка?

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

Run-Time Check Failure #3 - The variable 'v' is being used without being initialized
Mc Visual Studio 2010 C++ при построении таблицы выдает ошибку ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru