Люди, чего-то я непонимаю ...
Есть код на с++ с использованием stl, и в винде и в линухе компилится без проблем, но в линухе через раз падает в сегфаулт, а в винде идет без проблем, в связи с этим вопрос нужно ли в линуксе как-то по особому подклюяать стл, кроме как using namespace std; ?
Вот выдержки из кода
<main.cpp>
#include <stdlib.h>
#include "ext.h"
#include "cvalue.h"
int main(int argc, char argv[])
{
CValue v1, v2, v;
string s;
s="102";
v1=s;
s="156";
v2=s;
v=v1+v2;
v.Get(s);
cout<<s<<endl;
return EXIT_SUCCESS;
}
<ext.h>
#include <vector>
#include <string>
#include <stack>
#include <iostream>
#include <fstream>
#include <functional>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct TListItem
{
string Value;
bool IsOperator;
};
typedef unsigned short ushort;
typedef unsigned long ulong;
typedef vector <TListItem> TList;
typedef vector <ushort> TData;
<cvalue.h>
class CValue
{
private:
TData Data;
public:
void Get(string & V);
void GetData(TData & V);
CValue & operator = (string & V);
CValue & operator = (TData & V);
CValue & operator + (CValue & V);
}
<cvalue.cpp>
#include "ext.h"
#include "cvalue.h"
void CValue::Get(string & V)
{
char tmp[1];
string res="";
for (TData::iterator i=Data.begin(); i<Data.end(); i++)
{
sprintf(tmp, "%d", i);
cout<<"sadfsa"<<endl;
res.append(tmp);
}
reverse(res.begin(), res.end());
V=res;
};
void CValue::GetData(TData & V)
{
for (TData::iterator i=Data.begin(); i<Data.end(); i++)
V.push_back(*i);
};
CValue & CValue::operator = (string & V)
{
char tmp[1];
Data.clear();
for (int i=0; i<V.length(); i++)
{
tmp[0]=V[i];
tmp[1]='\0';
Data.push_back(atoi(tmp));
}
reverse(Data.begin(), Data.end());
return *this;
};
CValue & CValue::operator = (TData & V)
{
Data.clear();
for (TData::iterator i=V.begin(); i<V.end(); i++)
Data.push_back(*i);
return *this;
};
CValue & CValue::operator + (CValue & V)
{
CValue * res=new CValue;
TData s1;
GetData(s1);
TData s2;
V.GetData(s2);
TData s;
ushort v1, v2, v;
ushort ostatok=0;
char tmp[2];
int i;
if (s1.size()<s2.size())
while (s1.size()<s2.size())
s1.push_back(0);
else
while (s2.size()<s1.size())
s2.push_back(0);
for (i=0; i<s1.size(); i++)
{
v1=s1[i];
v2=s2[i];
v=v1+v2+ostatok;
if (v>9)
ostatok=1;
else
ostatok=0;
s.push_back(v-ostatok*10);
};
if (ostatok==1) s.push_back(1);
*res=s;
return *res;
};
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум C++, std::function, шаблоны, что я делаю не так? (2013)
- Форум precedence в С++ (2005)
- Форум [C++, boost::spirit::phoenix, std::get] Обернуть std::get в phoenix-овскую function (2011)
- Форум C++ с «умными» указателями и портирование кода. (2007)
- Форум Ошибка сегментирования (2017)
- Форум [C++][boost::signals2] Каковы сигнатуры операторов operator () в плюсах? (2010)
- Форум mysql++ вопрос по с++ (2009)
- Форум oop в «чистом» си (2005)
- Форум does not name a type... (2013)
- Форум [boost] проблемы с bind (2010)