-7

어떻게 배열에 동적으로 메모리를 할당 할 수 있습니까 (2D)?어떻게 C에서 동적으로 할당 된 배열을 만들 수 있습니까

int arr[n]; 

메모리가 더 많거나 적게 필요하면 동적 할당이 더 적합합니다. C 언어로 어떻게 할 수 있습니까?

+0

https://www.google.com/search?q=c+dynamic+ 배열 – Biffen

+1

[malloc] (http://en.cppreference.com/w/c/memory/malloc)과 ['free'] (http://en.cppreference.com/w/c)에 대해 들어 본 적이 있습니까?/메모리/무료)? –

답변

2

은 "R"행 번호와 "C"열 수를 가정 할 때,이 작업을 수행 할 수 있습니다

int **arr; 
arr = malloc(r*sizeof(int*)); 
for(int i=0; i < r; i++) 
{ 
    arr[i] = malloc(c*sizeof(int)); 
} 

을이 동적으로 정수에 대한 포인터의 배열을 할당하고 배열을 할당 각 포인터에 정수. 동적으로 할당 먼저 정수 배열을 삭제해야합니다이 경우이 완료 배열 한 다음 포인터 배열을 삭제하는 것을 잊지 마세요 :

for(int i=0; i < r; i++) 
{ 
    free(arr[i]); 
} 
free(arr); 
+0

그래서 "1"배열이 아니라 "1 + rows * columns"배열입니다. – alk

+0

이것은 C가 작동하는 방식으로, "하나의 2D 배열"을 동적으로 할당 할 수 없습니다. 정적으로 할당 된 2D 배열 (mxn)은 길이 m * n의 1D 배열로 실제로 할당되므로 arr [i] [j]와 같은이 배열을 액세스 할 때 메모리 위치 [i * n + j]에 액세스하지만 컴파일러는 배열이 동적으로 할당 될 때 "n"을 인식하지 못합니다. 배열로 할당 할 수 없습니다. 배열에 액세스 할 수없는 경우 arr [i] [j] –

+0

"* 동적으로 사용할 수 없습니다 "하나의 2D 배열"을 할당 * 할 수 있습니다! :-) 내 대답을보고 싶을 수도 있습니다. – alk

1

배열에 대한 포인터를 정의하고 많은 메모리로 할당 그것을 사용되는 C 구현 블라스 하나가 다르게 할 수있는 지원하면

#include <stdlib.h> 
#include <stdio.h> 


#define ROWS (5) 
#define COLUMNS (7) 


int main(void) 
{ 
    /* Define and initialise the pointer to the array. */ 
    int (*p)[ROWS][COLUMNS] = malloc(sizeof *p); 

    if (NULL == p) 
    { 
    perror("malloc() failed"); 
    return EXIT_FAILURE; 
    } 

    /* Initialize the array's members. */ 
    { 
    size_t r, c; 

    for (r = 0; r < ROWS; ++r) 
    { 
     for (c = 0; c < COLUMNS; ++c) 
     { 
     (*p)[r][c] = r * c; 
     } 
    } 
    } 

    /* Print the array's members' values. */ 
    { 
    size_t r, c; 

    for (r = 0; r < ROWS; ++r) 
    { 
     for (c = 0; c < COLUMNS; ++c) 
     { 
     printf("array[%zu][%zu] = %d\n", r, c (*p)[r][c]); 
     } 
    } 
    } 

    /* Free the array. */ 

    free(p) 

    return EXIT_SUCCESS; 
} 

: 가리 키도록 정의

#include <stdlib.h> 
#include <stdio.h> 


int main(void) 
{ 
    size_t ROWS = 5; 
    size_t COLUMNS = 7; 

    ... 
관련 문제