주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

코드 실행중 나타나는 Acess Violation의 메모리 문제

  • 정재헌
  • 2007.03.30
  • 조회수 1,461
코드 실행중에 메모리 부족을 알리는 오류 메세지가 뜹니다.
Visual C++ 6.0상의 Project Setting 에서 메모리 용량을 2기가 까지 늘려 보았지만 문제가 해결되지 않읍니다. 코드 상의 문제인 것 같은데 무슨 문제인지 모르겠읍니다. 다운로드아이콘test.zip

댓글 6

  • 유환주2007-03-30
    여전히 MS Visual C++ 6.0을 쓰시는 분들이 계시네요.
    6.0은 기술지원이 끝난 제품이라 사용하지 않아서 아래 사항이 그대로 적용 가능한지는 실험해 보시기 바랍니다.

    ----- 문제 Size가 매우 큰 프로젝트에서 사용하는 TIP -----
    현상: CPLEX 풀이시 또는 extract시 "out of memory" or CPLEX가 nonzero변수를 더이상 추가 하지 못한다는 에러 발생
    .
    원인: CPLEX 풀이 또는 extract시 사용되는 메모리 부족
    1) Microsoft Windows NT 기반 OS는 4GB의 가상주소 공간을 제공한다고 합니다. 그중 2GB는 애플리케이션이, 나머지 2GB는 시스템만 이용 가능합니다.
    2) 기본적으로 windows는 최대 application에 2G의 메모리만 할당 가능 합니다 - VM(가상메모리) 포함.
    3) VM이나 메모리를 늘려도 2)번 사항때문에 마찬가지 현상일거라 예상됨
    .
    방안: 애플리케이션 사용 가능 메모리를 3G 까지 늘리는 방법을 사용 (애플리케이션이 쓸수 있는 메모리를 3GB까지 늘리고 시스템이 쓸수 있는 메모리양을 1~2GB 사이로 줄이는 기능)

    1) 적용 가능 OS
    Windows Server 2003 제품군
    Windows XP Professional
    Windows 2000 Datacenter Server
    Windows 2000 advanced Server
    Windows NT Server 4.0 Enterprise

    2) 적용 방법
    C 폴더의 System 파일중 boot.ini 파일 /3GB를 추가해서 재부팅 하고,
    VC++ .net -> 프로젝트 속성-> 링커 -> 시스템 -> 큰주소 사용 -> 2GB 이상인 주소 지원으로 변경
    3) VM을 많이 사용하니 실행시 컴퓨터는 많이 느려지지만 에러 발생은 하지 않습니다.
    아이콘삭제
  • 정재헌2007-03-30
    소스를 보시면 아시겠지만 문제 사이즈를 크게 줄여 놓은 상태에서도 에러 메시지가 나옵니다. 메모리 문제가 나타나는 것은 코드 상의 오류인 것 같읍니다. 한 번 체크해주시면 감사하겠읍니다.
    아이콘삭제
  • 이보헌2007-03-30


    expr의 선언에서 IloExpr expr(env) 와 같은 형식이 필요합니다.

    cplex.getValue(var)에서 var가 bound 되지 않았을 수 있습니다.

    var[i][j] 와 같은 표현을 쓴 곳이 있는데 var의 정의된 크기보다 큰 i, j 값이 들어가는 부분이 있습니다.


    전체를 다 검토해 보지는 못했지만 C 코딩 상의 오류가 많이 있더군요.


    1. 변수가 디파인 되지 않은 상태에서 계산에 사용 하는 경우가 있습니다.

    2. for 문의 경우 (int i=0 ; i<Value ; j++) 와 같은 경우가 많이 있습니다.
    아이콘삭제
  • 유환주2007-03-31
    코드를 분석해 보았습니다.
    C 코딩 형식이지만, 이해하기 쉽지 않은 소스코드 입니다.
    누구나 코딩을 하면 오류가 발생 합니다.
    그러나 잘 정제된 방법론으로 코딩을 한다면 더 쉽게 오류를 발견할 수 있습니다.
    올바른 방법론을 익힌다면 이런일이 좀 더 즐겁게 느겨질 것입니다
    exact.h 파일의 오류 ----------------
    앞의 답변에서 밝혔듯이 env를 빼 먹었습니다.
    IloExpr obj(env);
    IloExpr obj1(env);
    test.cpp 파일의 오류 -----------------
    파일을 open 하지 않고 쓰기를 시도했습니다. 아래 부분이 comment out 되어 있는 것을 바로 잡았습니다.
    fout=fopen("최신실험장기.txt","a+");
    .
    수정돤 소스를 첨부했습니다.
    아이콘삭제
  • 정재헌2007-04-02
    감사합니다.
    그런데 여전히 문제가 남아 있어 질문드립니다.
    두번째로 '여기 수정'이라고 표시하신 바로 밑의 IloCplex cplex(env); 라인에서 exception catching 되어 프로그램이 끝나버립니다. 무엇이 잘못되었는지 알려주시면 대단히 감사하겠읍니다.
    아이콘삭제
  • 유환주2007-04-03
    모델과 문제의 의도를 몰라서 여러가지 시도는 못해 봤습니다.
    제가 사용하는 환경은 MSVC7.1 CPLEX10.1 입니다.
    축소된 문제라서 그런지 출력된 결과는 이상해 보여도 실행은 문제없이 됩니다.
    컴파일러 또는 라이선스의 설정 문제가 아닌지 의심이 됩니다.
    일단, CPLEX 예제를 하나 골라서 컴파일과 실행을 해 보세요.
    문제가 없다면 그 예제의 프로젝트 파일을 복사해서 그 예제의 소스파일을 자신의 소스로 대체해서 시도해 보시기 바랍니다.
    참고로 실행된 이미지를 첨부합니다.
    아이콘삭제

댓글 입력