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

Ошибка сегментации :( - C++

Восстановить пароль Регистрация
 
TemeeeD
 Аватар для TemeeeD
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 1
24.02.2016, 13:54     Ошибка сегментации :( #1
Подскажите в чем может быть проблема. =D После инклюдов объявлен резиновый массив [1000000][11] которого пока* хватает, потом расширю до [3000000][11]. Изначально массив весь заполнен нулями, подходя к этому циклу он частично заполнен данными, но места хватает чтобы просчитать функцию.
Программа компилируется нормально, доходя до следующего цикла при выполнении вылетает, пишут ошибка сегминтации. пытался прописывать стек в gcc, пытался в бубен бить, но пока без результата:
цикл должен скопировать все строки массива где столбец[3]=nomerliniir в конец перед нулями, заменив этот самый столбец на другое значение:
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
for(unsigned int tir=0;tir<1000000;tir++)
{   if(array[0][3]==nomerliniir)
    {   if(gslotrez==1&&gslotport==1)
        {   iir--;
            while(array[iir][0]!=0)
            {   iir++;
                if(array[iir][0]==0)
                {   array[iir][0]=array[tir][0];//Если закомментировать одну эту строку (оставив ковычку)ошибка не вылетает
                    array[iir][1]=array[tir][1];
                    array[iir][2]=array[tir][2];
                    array[iir][3]=liniyavivodar;
                    array[iir][4]=array[tir][4];
                    array[iir][5]=array[tir][5];
                    array[iir][6]=array[tir][6];
                    array[iir][7]=array[tir][7];
                    array[iir][8]=array[tir][8];
                    array[iir][9]=array[tir][9];
                    array[iir][10]=array[tir][10];
                    iir++;
                }
            }
        }
    }
}
liniyavivodar++;
Цикл находится в отдельной функции, массив объявлен(глобально?) после инклюдов - unsigned int array[1000000][11]={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
for(unsigned short int d=0; d<dlinna; d++)
{   for(unsigned int i=0; i<1000000; i++)
    {   if(array[i][d]==nomerlinii)
        {   ii--;   
            while(array[ii][0]!=0)
            {   ii++;
                if(array[ii][0]==0)
                {   array[ii][0]=array[i][0];
                    array[ii][1]=array[i][1];
                    array[ii][2]=array[i][2];
                    array[ii][3]=array[i][3];
                    array[ii][4]=array[i][4];
                    array[ii][5]=array[i][5];
                    array[ii][6]=array[i][6];
                    array[ii][7]=array[i][7];
                    array[ii][8]=array[i][8];
                    array[ii][9]=array[i][9];
                    array[ii][10]=array[i][10];
                    array[ii][d]=liniyavivoda;
                    ii++;
                }
            }
        }
    }
}
liniyavivoda++;
Где косяк господа?)) Я в си нетак давно - могу глупость не заметить какую-нибудь, помогите.
Под спойлером вся функция с косячным циклом (должна пройтись по всем линиям и заменить столбец [3] на нужное начение пока не встретятся линии с нулями 0 0 0 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
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
void massivrez()
{
    if(gslotrez==0&&gkslotrez==0&&gkkslotrez==0){return;}
    ifstream finr("Ðåñóðñû.txt");if(!finr){cout<<"ERR"<<endl;}
    ofstream foutr("ГђГ*çáèâêГ* Ðåñóðñîâ1.txt");if(!foutr){cout<<"ERR"<<endl;}
    ofstream razbivr("ГђГ*çáèâêГ* Ðåñóðñîâ2.txt");if(!razbivr){cout<<"ERR"<<endl;}
    for (unsigned short int irv = 0; irv < 300; ++irv){razbivr<<"                              "<<endl;} razbivr.close();
    char namer[20];
    short int zr, zzr, zzzr;
    unsigned short int nomerliniir=0;
    char tstr;
    unsigned int iir=1;
    while (finr>>namer>>zr>>zzr>>zzzr>>tstr)
    {
    nomerliniir++;
    char qtstr=tstr;
    unsigned short int variantr=2;
    unsigned short int liniyavivodar=nomerliniir*10;
    while(qtstr!=59)
    {
        cout<<"Г‚Г*ðèГ*Г*ГІ "<<variantr<<" Гў ëèГ*ГЁГЁ ("<<nomerliniir<<")"<<endl;
        char qnamer[20];
        short int qzr, qzzr, qzzzr;
        finr>>qnamer>>qzr>>qzzr>>qzzzr>>qtstr;
        cout<<qnamer<<' '<<qzr<<qzzr<<qzzzr<<qtstr<<endl<<endl;
        fstream razbivvr;razbivvr.open("ГђГ*çáèâêГ* Ðåñóðñîâ2.txt",ios::out|ios::in|ios::binary|ios::ate);
        if (!razbivvr){cout<<"dam son"<<endl;}
        razbivvr.clear();razbivvr.seekg(0);razbivvr.seekp(0);
        char cr;
        unsigned short int xr=1;
        while (xr!=liniyavivodar){cr=razbivvr.get();if(cr=='\n'){xr++;}}
        variantr++;
        razbivvr.seekp(0, ios::cur);
        razbivvr.seekp(razbivvr.tellg());
        razbivvr.flush();
        razbivvr<<qnamer<<' '<<qzr<<qzzr<<qzzzr<<qtstr;
        razbivvr.close();
        for(unsigned int tir=0;tir<1000000;tir++)
        {   if(array[0][3]==nomerliniir)
            {   if(gslotrez==1&&gslotport==1)
                {   iir--;
                    while(array[iir][0]!=0)
                    {   iir++;
                        if(array[iir][0]==0)
                        {   array[iir][0]=array[tir][0];
                            array[iir][1]=array[tir][1];
                            array[iir][2]=array[tir][2];
                            array[iir][3]=liniyavivodar;
                            array[iir][4]=array[tir][4];
                            array[iir][5]=array[tir][5];
                            array[iir][6]=array[tir][6];
                            array[iir][7]=array[tir][7];
                            array[iir][8]=array[tir][8];
                            array[iir][9]=array[tir][9];
                            array[iir][10]=array[tir][10];
                            iir++;
                        }
                    }
                }
            }
        }
        liniyavivodar++;    
    }
    foutr<<namer<<zr<<zzr<<zzzr<<tstr<<endl;
}
finr.close();
foutr.close();
return;
}

А тут почти, копия, но работающая (проходит по столбцам и, находя нужное копирует строку в конец, заменяя значение столбца)
Кликните здесь для просмотра всего текста
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
void massivgorod()                                  
{
    ifstream finz("ÇäГ*Г*ГЁГї ÃîðîäГ*.txt");if(!finz){cout<<"ERR"<<endl;}
    ofstream foutg("ГђГ*çáèâêГ* 1.txt");if(!foutg){cout<<"ERR"<<endl;} 
    ofstream razbiv("ГђГ*çáèâêГ* 2.txt");if(!razbiv){cout<<"ERR"<<endl;}
    for (unsigned short int i = 0; i < 300; ++i){razbiv<<"                              "<<endl;} razbiv.close();
    char name[20];
    short int z, zz, zzz;
    unsigned short int nomerlinii=0;
    char tst;
    unsigned int ii=1;
    while (finz>>name>>z>>zz>>zzz>>tst)
    {
    nomerlinii++;
    char qtst=tst;
        unsigned short int variant=2;
        unsigned short int liniyavivoda=nomerlinii*10;
    while(qtst!=59)
    {
        cout<<"Г‚Г*ðèГ*Г*ГІ "<<variant<<" Гў ëèГ*ГЁГЁ ("<<nomerlinii<<")"<<endl;
        char qname[20];
        short int qz, qzz, qzzz;
        finz>>qname>>qz>>qzz>>qzzz>>qtst;
        cout<<qname<<' '<<qz<<qzz<<qzzz<<qtst<<endl<<endl;
        fstream razbivv;razbivv.open("ГђГ*çáèâêГ* 2.txt",ios::out|ios::in|ios::binary|ios::ate);
        if (!razbivv){cout<<"dam son"<<endl;}
        razbivv.clear();razbivv.seekg(0);razbivv.seekp(0);
        char c;
        unsigned short int x=1;
        while (x!=liniyavivoda){c=razbivv.get();if(c=='\n'){x++;}}
        variant++;
        razbivv.seekp(0, ios::cur);
        razbivv.seekp(razbivv.tellg());
        razbivv.flush();
        razbivv<<qname<<' '<<qz<<qzz<<qzzz<<qtst;
        razbivv.close();
        for(unsigned short int d=0; d<dlinna; d++)
        {   for(unsigned int i=0; i<1000000; i++)
            {   if(array[i][d]==nomerlinii)
                {   ii--;   
                    while(array[ii][0]!=0)
                    {   ii++;
                        if(array[ii][0]==0)
                        {   array[ii][0]=array[i][0];
                            array[ii][1]=array[i][1];
                            array[ii][2]=array[i][2];
                            array[ii][3]=array[i][3];
                            array[ii][4]=array[i][4];
                            array[ii][5]=array[i][5];
                            array[ii][6]=array[i][6];
                            array[ii][7]=array[i][7];
                            array[ii][8]=array[i][8];
                            array[ii][9]=array[i][9];
                            array[ii][10]=array[i][10];
                            array[ii][d]=liniyavivoda;
                            ii++;
                        }
                    }
                }
            }
        }
        liniyavivoda++;
    }
    foutg<<name<<z<<zz<<zzz<<tst<<endl;
}
foutg.close();
finz.close();
return; 
}


Добавлено через 20 минут
Собсно если продублировать работающий 2ой вариант, но вставить туда нужный столбец, то все работает, но почему второй отказывается?(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2016, 13:54     Ошибка сегментации :(
Посмотрите здесь:

Ошибка сегментации C++
Непонятная ошибка сегментации C++
C++ ошибка сегментации
Ошибка Сегментации C++
C++ Ошибка сегментации.
Ошибка сегментации C++
C++ ошибка сегментации
C++ Ошибка сегментации

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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