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

Необработанное исключение типа system.runtime.InteropServices.SEHException - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
MartinSeptim
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 19
19.04.2012, 16:43     Необработанное исключение типа system.runtime.InteropServices.SEHException #1
Эта ошибка ссылается на 133 строку файла readlong. Подскажите как можно решить эту проблему?
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
#include "StdAfx.h"
#include "conio.h"
#include <iostream>
#include <vector>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include "readlongs.h"
 
#define inname argv[0]
#define outname argv[1]
 
 
using namespace std;
typedef std::vector <int> type;
#include <intrin.h>
#pragma intrinsic(__rdtsc)
 
unsigned __int64 tick(){
    return (__rdtsc());
 
}
 
int main(int argc,char* argv[]){
    /*Если выдает ошибку переполнения, значит в файле in.txt ести пустые строки*/
    ifstream file(inname);
    string str, tmp, str3;
    unsigned __int64 h,r,g,f;
    
    if(file.is_open()){
        while(getline(file, str3)){
type a, b, c, d, rez, rez1; //разные rez нужны для не засорения
      
    readlong  (a, str3); 
    readlong1 (b, str3);
    readlong2 (c, str3); 
    readlong3 (d, str3);
    ofstream out(outname, ios::app );
    h = tick();
    mult (a, b, rez); //использование умножения
    g = tick();
       out<<rez.back(); 
    for (int i = rez.size () - 2; i >= 0; i--)
    {  out<<rez[i];}
     
     out<<",";
/*==================================================*/
       r = tick();
    mult (c, d, rez1); //использование умножения
    f = tick();
 
    out<<rez1.back();
    for (int i = rez1.size () - 2; i >= 0; i--)
    { out<<rez1[i];}
    
    out<<"\r\n";
    out<<( long double)((g-h)+(f-r))/1600000<<endl ;
    }  }
    
 
    return 0;
}
Файл readlong

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include "StdAfx.h"
#include "conio.h"
#include <iostream>
#include <vector>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <ctime>
#define BASE 10
#define LEN 1
const int N=5100;
using namespace std;
typedef std::vector <int> type;
 
void readlong (type &vec, string str3)
{
    string str, str1, str2, str4;
    
str2=str3;
int v;
int len1=str2.length();
for(int i=0;i<len1;i++)
        if(str2[i]==' ')  v=i; 
    char buf2[2*N+2];
   memset( buf2, '\0', 2*N+2 );
   str2.copy( buf2, v );
    str4 = (const char*) buf2; // конвертация буфера в строку
     str=str4;
//==================================================
 
  int d;
    int len=str.length(); // длина основной строки
    for(int i=0;i<len;i++)
        if(str[i]=='.')  d=i; 
    char buf[N];
   memset( buf, '\0', N );
   str.copy( buf, d );
    str1 = (const char*) buf; // конвертация буфера в строку
     str=str1;
 
    for (int i = str.size (); i > 0; i--)
        vec.push_back (atoi (str.substr (i - LEN, LEN).c_str()));
}
 
void readlong1 (type &vec, string str3)
{
    string str, str1, str2, str4;
 
str2=str3;
int v, f, k;
int len1=str2.length();
if(str2[0]=='-')  k=1; //проверка первого числа на -
//==========================
for(int i=0;i<len1;i++)
if(str2[i]==' ')  {v=i; f=len1-v; } 
    char buf2[2*N+2];
   memset( buf2, '\0', 2*N+2 );
   str2.copy( buf2, v, f );
    str4 = (const char*) buf2; // конвертация буфера в строку
     str=str4;
    //==============================
 
    int len=str.length(); // длина основной строки
    int d, c;
    if(str[0]=='-')  k=0; //проверка второго числа на -
    if (k==1) {}
    for(int i=0;i<len;i++)
        if(str[i]=='.')  d=i; 
    char buf[N];
   memset( buf, '\0', N );
   str.copy( buf, d );
    str1 = (const char*) buf; // конвертация буфера в строку
     str=str1;
    for (int i = str.size (); i > 0; i--)
        vec.push_back (atoi (str.substr (i - LEN, LEN).c_str()));
}
 void readlong2 (type &vec, string str3)
{string str, str1, str2, str4;
 
 
str2=str3;
int v;
int len1=str2.length();
for(int i=0;i<len1;i++)
        if(str2[i]==' ')  v=i; 
    char buf2[2*N+2];
   memset( buf2, '\0', 2*N+2 );
   str2.copy( buf2, v );
    str4 = (const char*) buf2; // конвертация буфера в строку
     str=str4;
    //=====================
 
 
    int len=str.length(); // длина основной строки
    int d, c;
    for(int i=0;i<len;i++)
        if(str[i]=='.')  {d=i; c=len-d;}
    char buf1[N];
 
memset( buf1, '\0', N );
   str.copy( buf1, c, d+1 );
   str2 = (const char*) buf1; // конвертация буфера в строку
     str=str2;
    for (int i = str.size (); i > 0; i--)
        vec.push_back (atoi (str.substr (i - LEN, LEN).c_str()));
}
 
 void readlong3 (type &vec, string str3)
{ string str, str1, str2, str4;
  
str2=str3;
int v, f;
int len1=str2.length();
for(int i=0;i<len1;i++)
if(str2[i]==' ')  {v=i; f=len1-v; } 
    char buf2[2*N+2];
   memset( buf2, '\0', 2*N+2 );
   str2.copy( buf2, v, f );
    str4 = (const char*) buf2; // конвертация буфера в строку
     str=str4;
 
    //=====================
 
    int len=str.length(); // длина основной строки
    int d, c;
    for(int i=0;i<len;i++)
        if(str[i]=='.')  {d=i; c=len-d;}
    char buf1[N];
 
memset( buf1, '\0', N );
   str.copy( buf1, c, d+1 );
   str2 = (const char*) buf1; // конвертация буфера в строку
     str=str2;
    for (int i = str.size (); i > 0; i--)
        vec.push_back (atoi (str.substr (i - LEN, LEN).c_str()));
}
 
 
void mult (type &a, type &b, type &rez)
{  
    rez.resize (a.size() + b.size());
    for (int i = 0; i < a.size(); ++i)
        for (int j = 0, carry = 0; j < b.size() || carry; ++j) //сarry вес разряда
        {
            long long cur = rez[i+j] + a[i] * (j < b.size() ? b[j] : 0) + carry;
            rez[i+j] = cur % BASE;
            carry = cur / BASE;
        }
        while (rez.size() > 1 && rez.back() == 0)
        rez.pop_back();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 16:43     Необработанное исключение типа system.runtime.InteropServices.SEHException
Посмотрите здесь:

C++ Необработанное исключение
C++ Необработанное исключение
Необработанное исключение C++
Необработанное исключение C++
C++ Необработанное исключение
C++ Необработанное исключение
Необработанное исключение C++
C++ Необработанное исключение

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

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

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