[완료]메모리 할당 관련 문제

hoterm의 이미지

아래와 같은 값이 있습니다.
단 아래의 값의 수는 가변적입니다.

그래서 포인터로 처리하려고 합니다.

부득이 생각한게 구조체를 사용하구요.

points="179,113 269,113 269,202 179,202"

struct xy
{
char *x_points;
char *y_points;
};

그리고

char *tmpPoints[2];
struct xy *tmpXy;

tmpPoints[0] = (char *)malloc(sizeof(char)*8);
tmpPoints[1] = (char *)malloc(sizeof(char)*8);

tmpXy = (struct xy *)malloc(sizeof(struct xy));

아래에 x, y의 좌표를 순차적으로 tmpPoints라는 포인터에 저장하고
그 주소를 다시 tmpXy 구조체 포인터에 주게 됩니다.

while(bufLine[i] != '"')
694 {
695 if(bufLine[i] != ',' && bufLine[i] != ' ')
696 {
697 if((even%2))
698 {
699 tmpPoints[0][j++] = bufLine[i++];
700 }
701 else
702 {
703 tmpPoints[1][j++] = bufLine[i++];
704 }
705 }
706 else
707 {
708 if(bufLine[i] == ',')
709 {
710 tmpPoints[0][j] = '\0';
711 tmpXy[k].x_points = tmpPoints[0];
712
713 i++;
714 j = 0;
715 even++;
716 }
717 else if(bufLine[i] == ' ')
718 {
719 tmpPoints[1][j] = '\0';
720 tmpXy[k].y_points = tmpPoints[1];
721 i++;
722 j = 0;
723 even++;
724 k++;
725 }
726 }
727 }

문제는 k를 증가시켜가면서 한쌍 이상의 x,y좌표를 저장하려하는데
그게 안되네요.
어찌해야 하는지 알려주시면 베리 캄사 땡큐...

감사함다.

auditory의 이미지

포인트(점)을 다루는 스트럭쳐를 정의하고
이 스트럭쳐의 배열을 이용하도록 구조를 고치는게 낫을것 같습니다.

그리고 입력이 스트링에 저장되어 있나요?
그렇다면 이 스트링을 파싱해서 원하는 데이터를 뽑는 부분과,
뽑아진 데이터를 처리하는 부분으로 나눠서 생각하는게
프로그램하기 편할 것 같습니다..

auditory의 이미지

아래 코드 참고하세요~

#include <string.h>
typedef struct 
{
        int x;
        int y;
} PT;
 
int main()
{
        char points[] = "179,113 269,113 269,202 179,202";
        PT pts[100];
        int i=0;
        int num_pts;
        char *tok;
        char* str = points;
        for (i=0; ; i++, str=NULL)
        {
                tok = strtok(str, " ,");
                if (!tok) break;
 
                if (i%2)
                        pts[i/2].y = atoi(tok);
                else
                        pts[i/2].x = atoi(tok);
 
                str = NULL;
        }
        num_pts=i/2;
}
hoterm의 이미지

from amateur

from amateur

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.