[질문] X라이브러리 사용시 메모리 문제 ~~~

jjasook의 이미지

-lXm -lXt -lX11

다름이 아니라, 아래돠 같이 X 라이브러리를 사용을 해서
GUI화면을 구성합니다.

그런데, 문제는 이 소스가 유닉스 sun5.6에서는 문제없이 잘 실행이 되는데,
유닉스 sun5.8에서는 core를 발생합니다.

아래의 소스에서 보시는 바와 같이 주석처리한 부분에서,
core가 발생됩니다.
사이사이에, printf 문을 추가하게 되면,
어떨때에는 문제없이 실행이 되기도 하고, 아니면 불규칙적인 위치까지
print문을 찍다가 core를 발생시키기도 합니다.

dbx로 디버깅을 해보면, XtVaSetValues라이브러리 안의
strcmp()에서 걸립니다.

그래서 메모리 문제인 듯 싶어서, 함수 사이사이에,
임의로 약 2000바이트정도로 메모리를 할당시켜서 실행을
시켜보았지만, 문제가 해결이 되질 않았습니다.

도대체 무슨 문제인지를 알지를 못하겠습니다.
혹 OS버전에 따른 X라이브러 문제인지......
우앙~~~ 아시는분 답변 부탁드립니다.

if(err1 == 0){
XtSetSensitive(optlabel[0], True);
XtSetSensitive(optlabel[1], True);
XtSetSensitive(optlabel[2], True);
XtSetSensitive(optlabel[5], True);
XtSetSensitive(optlabel[6], True);
XtSetSensitive(optlabel[7], True);
XtSetSensitive(optlabel[8], True);
/*----------- core를 발생시키는 부분
XtVaSetValues(msca, XmNeditable, True);
tmp = (char *)malloc(2000);
printf("1\n");
XtVaSetValues(smca, XmNeditable, True);
printf("2\n");
XtVaSetValues(dnum, XmNeditable, True);
printf("3\n");
XtVaSetValues(dnum2, XmNeditable, True);
printf("4\n");
XtVaSetValues(vsrn, XmNeditable, True);
printf("5\n");
XtVaSetValues(mscid, XmNeditable, True);
printf("6\n");
XtSetSensitive(vsrn_flag_option, True);
*/

XtSetSensitive(list, True);
XtSetSensitive(refresh, True);
/*
XtSetSensitive(optlabel[3], False);
XtSetSensitive(optlabel[4], False);
XtVaSetValues(otaf, XmNeditable, False);

XtVaSetValues(aca, XmNeditable, False);
*/

}

binaa1의 이미지

저는 AIX에서 motif library를 사용하는데요..

보통 XtVaSetValues 의 마지막 인자를 NULL값을 넣어 주는데, 여기에서는 NULL값이 보이지가 않네요.

XtVaSetValues(msca, XmNeditable, True, NULL);
이렇게 한번 바꾸어 보고 실행해 보시면 어떨까요?

jjasook의 이미지

감사합니다.
정말로 그렇게 하니깐..5.8에서도 제대로 실행이 됩니다.
man페이지를 보면,

void XtVaSetValues(w, ...)
Widget w;

이렇게 나와서, 굳이 NULL을 넣지 않아도 상관이 없을거라고 생각하고
5.6에서는 잘 실행이 되니깐, 문제가 되니 않을 거라고 생각했는데.

그것이 무슨 차이인지 알고 싶습니다.

jjasook의 이미지

우앙~~ 알았습니다.

void XtVaSetValues(w, ...)
Widget w;

은 파라미터의 개수가 무한정이니깐,
NULL로써 끝을 알려주는거네요..

근데 재수 좋게, 5.6에서는 죽지 않았던거구,
5.8에서는 죽었던거네요~~

우아앙~~~

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.