리눅스 프로그래밍 중인데요..계속 에러가 나서

dream70의 이미지

리눅스에서 돌릴프로그램을
일단 비주얼c++에서 짜고 있는데요..
계속 에러가 떠서 어떻게 할줄 모르겠네요..

디버깅 모드로 확인해 보니깐 에러 지점은 main함수에 return 0; 하고 나서 바로
에러가 나구요..
디버거가 헤더에 FSTREAM 에
public:
typedef basic_ifstream<_E, _Tr> _Myt;
typedef basic_filebuf<_E, _Tr> _Myfb;
basic_ifstream()
: basic_istream<_E, _Tr>(&_Fb) {}
explicit basic_ifstream(const char *_S,
ios_base::openmode _M = in)
: basic_istream<_E, _Tr>(&_Fb)
{if (_Fb.open(_S, _M | in) == 0)
setstate(failbit); }
virtual ~basic_ifstream()
{}

여기서 젤마지막 {} 이부분에 이상있다고 표시가 되는데..

대체 뭐가 잘못됐는지 모르겠거든요....

좀 도와주세요 ^^;

밑에 제 코드 입니다~~~~~~~~~~~~

#include<iostream>
#include<cstring>
#include<fstream>
#include<stdio.h>
#include<ctype.h>

using namespace std;

class assoc{
private:
char key[200];
int val;

public:
assoc() { strcpy(key,""); val=0; };
~assoc(){};
void set_aso(char *a, int b) { strcpy(key,a); val=b;}
void set_key(char *a) { strcpy(key,a); }
void set_val(int b) { val=b;}
void del_aso() { strcpy(key,""); val=0;}
char *get_key() { return key; }
int get_val() { return val; }
};

class proce{
private:
assoc *aso;
int len;
char *token[3];

public:
proce();
~proce();

ifstream fin;
ofstream fout;
};

proce::proce()
{
len=0;
aso=new assoc[100];
token[3]=new char[255];

}

proce::~proce()
{

delete[] aso;
delete[] token[3];

}

int main ()
{

proce pro;

pro.fin.open("assoc.inp");
pro.fout.open("assoc.out");

char line[100];
memset (line,0,sizeof(line));

pro.fin.close();
pro.fout.close();

return 0;
}

doldori의 이미지

char* token[3] 인데

	token[3]=new char[255]; 

	delete[] token[3]; 

이렇게 하셨네요. ^^;
익명 사용자의 이미지

클래스에서
ifstream fin;
ofstream fout;

이부분만 없얘니깐 정상적으로 돌아가던데..

token지운게 잘못된 건가요?

doldori의 이미지

그런데요.. wrote:
token지운게 잘못된 건가요?

new를 했으니 당연히 delete를 해야지요. 제가 말하는 건 배열 요소가 3개이니
token[3]은 잘못이라는 뜻입니다.
익명 사용자의 이미지

파일 입출력에는 아무런 이상이 없다는 겁니까?

파일 입출력에서 에러가 나는데요?

익명 사용자의 이미지

char* token[3]

클래스 private에 쓰인 이부분을

컨스트럭터에서 초기화 하는 방법이랑
디스트럭터에서 소멸하는 방법좀 알려 주세요 ^^;;

부탁드립니다.^^

doldori의 이미지

그러면 wrote:
파일 입출력에는 아무런 이상이 없다는 겁니까?

파일 입출력에서 에러가 나는데요?


입출력 코드를 볼 수 없으니 왜 에러가 나는지는 모르겠습니다.
doldori의 이미지

그러면... wrote:
char* token[3]

클래스 private에 쓰인 이부분을

컨스트럭터에서 초기화 하는 방법이랑
디스트럭터에서 소멸하는 방법좀 알려 주세요 ^^;;


알려드린다고 해서 별로 도움이 될 것 같지는 않지만...
proce::proce() 
{ 
    token[0] = token[1] = 0;
    token[2]=new char[255]; 
} 

proce::~proce() 
{ 
    for (int i = 0; i < 3; ++i) delete [] token[i];
} 

복사생성자와 대입연산자도 적절히 정의하세요.
이렇게 하느니 차라리 char* 대신 std::string을 쓰는 게 낫겠습니다.
익명 사용자의 이미지

죄송하지만 std::string은 어떻게 구현하는지
좀 알려 주시면 안됩니까^^;;;

제가 잘 몰라서요..

token[1]에 10개정도의 문자가 들어갈꺼구요.
token[2], token[3]도 마찬가집니다.

이 token[1],[2],[3]에 데이타를 넣는 방식은
strcpy로 넣게 되구요...

부탁드립니다. ㅠ,.ㅠ;;;

doldori의 이미지

std::string은 구현하는 게 아니고 표준 라이브러리에 있는 것을 갖다 쓰는 겁니다.

#include <string>

class proce
{
private:
    std::string token[3];
};

이러면 생성/소멸/복사가 모두 자동적으로 됩니다.
그보다도 혹시 token의 첨자 범위가 1~3이라고 생각하고 계신지요? -_-;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.