#include <stdio.h>
#include <stdlib.h>
int main()
{
int k = 0;
int i;
int s = 0;
int temp = 0;
scanf_s("%d", &k);
int** numPtr = malloc(sizeof(int) * k);
for (i = 0; i < k; i++)
{
for (s = 0; s < 5; s++)
{
scanf_s("%d", &numPtr[i][s]);
}
}
for (i = 0; i < k; i++)
{
for (s = 0; s < 5; s++)
{
if (numPtr[i][s] < numPtr[i + 1][s + 1])
{
temp = numPtr[i][s];
numPtr[i][s] = numPtr[i + 1][s + 1];
numPtr[i + 1][s + 1] = temp;
}
}
}
for (i = 0; i < k; i++)
{
for (s = 0; s < 5; s++)
{
printf("%d ", numPtr[i][s]);
}
}
free(numPtr);
return 0;
}
배열크기 입력받아서 배열 만들고 그리고 배열에 입력받은걸 큰 순서대로 출력하는건데 실행해보면 배열 크기 입력받고 나서 하나만 입력받는데 뭐가 문제인가요??
int** numPtr = malloc(sizeof(int) * k); 이게 아니라 int** numPtr = malloc(sizeof(int*) * k); 이거아닌가? 그리고 int numPtr[] 이것도 메모리 할당 안됐고
int numPtr[]이거는 어디 말하는 건가요??
scanf_s("%d", &numPtr[i][s]); 메모리 공간이 할당이 되지 않았는데 저장을 하라고 하니까.. 여기서 에러 떨어질거 같은데
numPtr[0] = malloc (sizeof (int) * 개수); 이런 식으로 할당해줘야 함.
numPtr[0] 은 int* 타입임. numPtr 은 int** 타입이고
https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/
3) Using pointer to a pointer 이거를 보셈. int r = 3, c = 4, i, j, count; int **arr = (int **)malloc(r * sizeof(int *)); for (i=0; i
int **array = (int **) malloc (row * sizeof (int *)); array[i] = (int *) malloc (column * sizeof (int));
array[i] = (int *) malloc (column * sizeof (int)); 이거는 for 문으로 돌려야겠죠?
int **array = (int **) malloc (row * sizeof (int *)); 이 문장은 int* 타입으로 row 개의 메모리 공간 할당하는 문장. int** 타입의 array 에 int** 타입의 값을 저장함. 그냥 외우셈. 접근할 때는 array[0], array[1] 이런 식으로 접근하면 되는데... 문제는 그게 int* 타입의 포인터라.. 실제 값이 없음. 그래서 array[0] = (int *) malloc (column * sizeof (int)); 이런 식으로 int 타입의 공간을 column 개 할당해서 그 메모리ㅣ 주소를 int* 타입의 변수에 대입하는 문장임.
그 위에서 말한것처럼 numPtr에 할당하려면 int**이거를 사용해야하고 for으로 [0][0], [0][1]...이런식으로 하나 하나 할당해야 된다는 건가요??
int **numPtr = malloc (sizeof (int *) * 갯수); 이렇게 하면 int* 형태의 값을 저장할 수 있는 공간이 할당됨.
sizeof (int *) 해보면 아마 값이 4 나올거임. 그러니까.. int*, int**, char*, char** 이런 형태가 중요한게 아니라 malloc 쓸 때에는 메모리 공간 갯수가 제일 중요함.
int **numPtr = malloc (단위메모리크기 * 메모리갯수); 이렇거지
그래서 int** numPtr = malloc (sizeof(int*) * 행_갯수); 이렇게 하면 (int*) 공간이 행_갯수만큼 할당되고 그 메모리의 주소가 numPtr 에 들어가 있음.
메모리 주소값만 있는거고 우리가 써먹을 1, 2, 222, 이러한 값을 넣을 수 있는 공간이 할당이 안 되어 있는 상태이니까.. numPtr[0] = malloc (sizeof(int) * 10); 이런 식으로 할당하면 numPtr[0][0]...numPtr[0][9] 까지 접근가능하겠지?
numPtr[1] = malloc (sizeof(int) * 10); 이런 식으로 할당하면 numPtr[1][0]...numPtr[1][9] 까지 접근가능하겠지? numPtr[2] = malloc (sizeof(int) * 10); 이런 식으로 할당하면 numPtr[2][0]...numPtr[2][9] 까지 접근가능하겠지? ....
int **array_new (int row, int col); 이 함수를 작성해보세요
int **array_new (int row, int col); void array_free (int **array); 이렇게 함수 두개를 작성해봐요. 그걸 할 줄 알면 됨.
https://m.blog.naver.com/PostView.nhn?blogId=jsky10503&logNo=221261265884&proxyReferer=https:%2F%2Fwww.google.com%2F
여기에 나온식으로 하면 되는 건가요???
https://gall.dcinside.com/board/view/?id=programming&no=1493674&_rk=96k&page=1
이렇게 해보셈. 근데 님 소스에 버그있음. for (i = 0; i < k; i++)
{
for (s = 0; s < 5; s++)
{
if (numPtr[i][s] < numPtr[i + 1][s + 1]) 인덱스 범위 초과함
아..이제 봤네요 감사합니다!! if (numPtr[i][s] < numPtr[i + 1][s + 1]) 이 부분이 틀렸다는 거죠??