어떻게 배열에 동적으로 메모리를 할당 할 수 있습니까 (2D)?어떻게 C에서 동적으로 할당 된 배열을 만들 수 있습니까
int arr[n];
메모리가 더 많거나 적게 필요하면 동적 할당이 더 적합합니다. C 언어로 어떻게 할 수 있습니까?
어떻게 배열에 동적으로 메모리를 할당 할 수 있습니까 (2D)?어떻게 C에서 동적으로 할당 된 배열을 만들 수 있습니까
int arr[n];
메모리가 더 많거나 적게 필요하면 동적 할당이 더 적합합니다. C 언어로 어떻게 할 수 있습니까?
은 "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);
그래서 "1"배열이 아니라 "1 + rows * columns"배열입니다. – alk
이것은 C가 작동하는 방식으로, "하나의 2D 배열"을 동적으로 할당 할 수 없습니다. 정적으로 할당 된 2D 배열 (mxn)은 길이 m * n의 1D 배열로 실제로 할당되므로 arr [i] [j]와 같은이 배열을 액세스 할 때 메모리 위치 [i * n + j]에 액세스하지만 컴파일러는 배열이 동적으로 할당 될 때 "n"을 인식하지 못합니다. 배열로 할당 할 수 없습니다. 배열에 액세스 할 수없는 경우 arr [i] [j] –
"* 동적으로 사용할 수 없습니다 "하나의 2D 배열"을 할당 * 할 수 있습니다! :-) 내 대답을보고 싶을 수도 있습니다. – alk
배열에 대한 포인터를 정의하고 많은 메모리로 할당 그것을 사용되는 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;
...
https://www.google.com/search?q=c+dynamic+ 배열 – Biffen
[malloc] (http://en.cppreference.com/w/c/memory/malloc)과 ['free'] (http://en.cppreference.com/w/c)에 대해 들어 본 적이 있습니까?/메모리/무료)? –