나는 C로 다이나믹 배열을 만드는 법을 배우려는 초보자입니다. 코드를 사용하여 코드를 만들면 코드가 나에게 오류를주지 않습니다. 블록을 실행하지만 충돌이 발생하면 오류가 발생합니다. 나는 추락이 내 기억을 자유롭게하는 것과 관련이 있다고 생각한다. 왜냐하면 코드가 충돌하기 전에 원하는 출력을 내고 있기 때문이다.어떻게 동적으로 할당 된 배열에서 메모리를 해제 할 수 있습니까?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
int *p = (int *)malloc(sizeof(*p));
printf("Hello World! I have created a dynamic array of 20x30 integers! \n");
for (i = 0; i <= 19; i++)
{
p[i] = (int)malloc(sizeof(int*));
printf(" %2d ", i);
for (j = i + 1; j <= 29 + i; j++)
{
p[i] = 0;
printf("%2d", j);
}
printf("\n");
}
for (i = 0; i <= 19; i++);
{
free(p[i]);
}
free(p);
return 0;
}
첫 번째 malloc은 단일 int에 대해 공간을 할당합니다. – tkausl
덧붙여서,'p [i] = (int) malloc (sizeof (int *)); '가 잘못되었습니다. 'p [i]'는'int'이며 포인터가 아니기 때문에 거기에 포인터를 저장하면 안됩니다. 많은 시스템에서'int'와 포인터의 크기가 다르므로 코드가 충돌을 일으킬 수도 있습니다. – kaylum
[고정 코드] (http://ideone.com/WWiYZL) – BLUEPIXY