편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.12.08

    C언어 Blocks[7][2]={0,}; 초기화 과정에서 스택 버퍼 오류가 발생


    static int m_Glass[7][2] = { {1,1},{1,1},{1,1},{1,1},{1,1},{1,1},{1,1} };
    
    
    void InitBlocks(RECT blocks[][2], RECT& bound);
    void DrawBlocks(HDC hdc, RECT blocks[][2]);
    
    static RECT Blocks[7][2];
    
    int randomnumber;
    int rand_array[7];
    
    InitBlocks(Blocks, clientR);
    
    DrawBlocks(hdc, Blocks);
    
            for (int k = 0; k < 7; k++) {
                randomnumber = rand() % 2;
                rand_array[k] = randomnumber;
            }
    
            Blocks[7][2] = { 0, };//0이면 깨지는 유리, 1이면 강화 유리
    
    
            for (int row = 0; row < 7; row++) {
                Blocks[row][rand_array[row]] = { 1, };
            }
    
    void InitBlocks(RECT blocks[][2], RECT& bound) {
    
        RECT r, t;
        int w, h;
    
        r = bound;
        r.right /= 2;
    
        r.top = 50;
        r.bottom = r.top + 40;
    
        w = r.right - r.left;
        h = r.bottom - r.top;
    
        for (int i = 0; i < 7; i++) {
            t = r;
            OffsetRect(&r, 0, h);
    
            for (int j = 0; j < 2; j++) {
                blocks[i][j] = t;
                OffsetRect(&t, w, 0);
            }
        }
    }
    
    
    void DrawBlocks(HDC hdc, RECT blocks[][2]) {
        COLORREF color = 255;
    
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 2; j++) {
                if (m_Glass[i][j])
                    DrawObject(hdc, blocks[i][j], RGB(0, 0, 0), RGB(0, color, color), 0);
            }
        }
    }
    

    전체 코드가 아니고 일부만 가져왓는데, Blocks[7][2]={0,}; 초기화 과정에서 스택 버퍼 오류가 발생한다고 합니다.. 구글링을 찾아봤지만, 스택 버퍼에 관한 오류는 대부분 for구문 설정을 잘못해서 그런데, 저는 for구문 설정은 제대로 한 것 같습니다.

    제가 원하는 코드는 RECT라는 구조체에 0과 1을 초기화해서(일정 조건하에) 0또는 1의 값을 리턴받고 싶은데, 이걸 어떻게 해야할지 모르겠습니다.

    말이 중구난방한거 같은데 도와주시면 정말 감사하겠습니다.

  • 프로필 윤상혁님의 편집
    날짜2021.12.08

    안녕하세요...코딩 초보입니다...윈도우즈 API이지만 사실상 c언어 질문인데요...


    static int m_Glass[7][2] = { {1,1},{1,1},{1,1},{1,1},{1,1},{1,1},{1,1} };

    void InitBlocks(RECT blocks[][2], RECT& bound); void DrawBlocks(HDC hdc, RECT blocks[][2]);

    static RECT Blocks[7][2];

    int randomnumber; int rand_array[7];

    InitBlocks(Blocks, clientR);

    DrawBlocks(hdc, Blocks);

        for (int k = 0; k < 7; k++) {
            randomnumber = rand() % 2;
            rand_array[k] = randomnumber;
        }
    
        Blocks[7][2] = { 0, };//0이면 깨지는 유리, 1이면 강화 유리
    
    
        for (int row = 0; row < 7; row++) {
            Blocks[row][rand_array[row]] = { 1, };
        }
    

    void InitBlocks(RECT blocks[][2], RECT& bound) {

    RECT r, t;
    int w, h;
    
    r = bound;
    r.right /= 2;
    
    r.top = 50;
    r.bottom = r.top + 40;
    
    w = r.right - r.left;
    h = r.bottom - r.top;
    
    for (int i = 0; i < 7; i++) {
        t = r;
        OffsetRect(&r, 0, h);
    
        for (int j = 0; j < 2; j++) {
            blocks[i][j] = t;
            OffsetRect(&t, w, 0);
        }
    }
    

    }

    void DrawBlocks(HDC hdc, RECT blocks[][2]) { COLORREF color = 255;

    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 2; j++) {
            if (m_Glass[i][j])
                DrawObject(hdc, blocks[i][j], RGB(0, 0, 0), RGB(0, color, color), 0);
        }
    }
    

    }

    전체 코드가 아니고 일부만 가져왓는데, Blocks[7][2]={0,}; 초기화 과정에서 스택 버퍼 오류가 발생한다고 합니다.. 구글링을 찾아봤지만, 스택 버퍼에 관한 오류는 대부분 for구문 설정을 잘못해서 그런데, 저는 for구문 설정은 제대로 한 것 같습니다.

    제가 원하는 코드는 RECT라는 구조체에 0과 1을 초기화해서(일정 조건하에) 0또는 1의 값을 리턴받고 싶은데, 이걸 어떻게 해야할지 모르겠습니다.

    말이 중구난방한거 같은데 도와주시면 정말 감사하겠습니다..ㅠ