C언어 배열을 동적할당 할때...

조회수 489회

이미지

#include <stdio.h>

int main()
{
    int * arr1 = (int *)malloc(sizeof(int) * 6);
    int * arr2 = (int *)malloc(sizeof(int) * 6);
    int * arr3 = (int *)malloc(sizeof(int) * 6);

    arr1[3][2] = {
        {3, 4},
        {5, 2},
        {1, 2},
    };

    arr2[3][2] = {
        {1, 2},
        {7, 9},
        {3, 5}
    };

    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 2; j++)
            arr3[i][j] = arr1[i][j] * arr2[i][j];


    for (int i = 0; i < 3; i++)
        printf("%d %d\n", arr3[i][0], arr3[i][1]);

    free(arr1);
    free(arr2);
    free(arr3);
    return 0;
}

저렇게 동적 할당하고 배열 선언하는거 맞나요..? 배열 들어간 모든 줄에 subscripted value is neither array nor pointer nor vector 이런 오류가 뜨는데...

1 답변

  • 여러 방법이 혼합되어 사용되어 있네요

    arr3[i][j]
    

    처럼 사용하시고 싶으시다면 arr3[0], arr3[1]에 arr3[0][0]에 대한 포인터, arr3[1][0]에 대한 포인터가 있어야 하며

    int * arr1 = (int *)malloc(sizeof(int) * 6)
    

    처럼 사용하시고 싶으시다면 arr1[0] = 3; arr1[1] = 4; 등의 방법으로 사용해주셔야 합니다.

    추가적으로 프로그램은 사용자가 어떤 배열의 크기를 사용하고 있는지 모르기 때문에 {{3, 4}, {...}} 등의 방법으로 배열을 초기화 하는 방법은 불가능합니다.

    추가적으로 arr1[3][2]부분에서 마지막 {1, 2} 이후 쉼표가 들어가 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)