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

найти причину вылета программы - C++

Восстановить пароль Регистрация
 
antid0t
 Аватар для antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
01.04.2011, 20:28     найти причину вылета программы #1
Вообщем написал программу, вроде бы все правильно (так говорит компилятор), но программа вылетает с ошибкой "Отправить отчет/Не отправлять", вообщем вы все ее знаете.

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
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
 
 
int n3x3(int nmas[3][3]) {
    
    int np[3][5], ns[6], d;  // calculating 3x3 minor
    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            ns[i]=1;
            ns[i+3]=1;
            np[i][j]=nmas[i][j];}}  // 3x5 matrix  
    for (i=0; i<3; i++){
        for(int j=3; j<5; j++) {
            np[i][j]=nmas[i][j-3]; } }
    int k=2;  // Hiden cycle
    for ( i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            ns[j]=ns[j]*np[i][i+j]; 
            ns[j+3]=ns[j+3]*np[k][i+j]; }
        k--; }
    d=ns[0]+ns[1]+ns[2]-ns[3]-ns[4]-ns[5];
    
    return d; }
 
 
void main() {
    int nSystem[3][4], nDet[3][3], nDetr, nFloat, nAnswer[3];
    ifstream fin("System.txt");
    cout<< "Make sure that you have already entered\n"
        << "Your system's matrix in 'System.txt' file in root directory.\n";
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            fin >> nSystem[i][j];
            if (j!=3) {
                nDet[i][j]=nSystem[i][j]; }}}
    nDetr=n3x3(nDet);
    for (int k=0; k<3; k++) {
        for (int i=0; i<3; i++) {
            for (int j=0; j<3; j++) {
                nDet[i][j]=nSystem[i][j];
                nDet[i][k]=nSystem[i][3]; }}
    nFloat=n3x3(nDet);
    nAnswer[k]=nFloat/nDetr; }
    cout<< "Theres your answer:"
        << "\nX = " << nAnswer[0]
        << "\nY = " << nAnswer[1]
        << "\nZ = " << nAnswer[2]
        << "\nThere it is. Do you like it? [1/0]: "; // Pause button
    cin >> nDetr;
    return; }
Путем пошагового написания я выяснил что причина вылета кроется в 45-ой строчке, но почему - для меня загадка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
01.04.2011, 21:17     найти причину вылета программы #2
Еще бы "System.txt" сюда.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
01.04.2011, 21:18     найти причину вылета программы #3
nAnswer[k]=nFloat/nDetr; }
может выход за пределы массива k>2 но вроде не похоже
nDetr может равен 0
исключение деление на 0
или лови исключение или обрабатывай переменную
C++
1
2
if(nDetr)
 nAnswer[k]=nFloat/nDetr;
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
01.04.2011, 21:20     найти причину вылета программы #4
Да, это деление на ноль.
Unhandled exception at 0x013120d0 in tst.exe: 0xC0000094: Integer division by zero.
antid0t
 Аватар для antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
01.04.2011, 21:40  [ТС]     найти причину вылета программы #5
Хм, спасибо.
Yandex
Объявления
01.04.2011, 21:40     найти причину вылета программы
Ответ Создать тему
Опции темы

Текущее время: 10:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru