나는 2 차원 배열을 통해 malloc에 작업을 수행하는이 방법을 사용, 내 소스는 http://c-faq.com/aryptr/dynmuldimary.html 및 Modify malloc strategy for 2D Array so malloc succeeds 같습니다2 차원 어레이가있는 C malloc : 세그먼트 화 오류가없는 이유는 무엇입니까?
int
main(int argc, char *argv[])
{
long **array = NULL;
array = malloc(5 * sizeof(long *));
for (int i = 0; i < 5; i++)
array[i] = malloc(3 * sizeof(long));
array[4][2] = 515;
array[4][3] = 212;
array[4][10000] = 3;
printf("%ld\n", array[4][10000]);
return 0;
}
내 질문은, 는 이유는 어떤의 실행에 세그먼트 오류를 얻을하지 않습니다 돌아 오기 전에 마지막 세 줄? 안전합니까 (공존의 존재를 무시함)?
c는 배열의 경계를 검사하지 않으므로 보통 유효한 메모리에 액세스하고 있는지 확인하기 위해 OS에 의존합니다. –
C (C++이 아님)를 수행하는 경우 많은 사람들이 다른 유형의 포인터를 생략하는 것을 권장하지 않습니다. 특히'array = (long **) malloc (5 * sizeof (long *));'을'array = malloc (5 * sizeof * array);로 변경하면 배열의 타입을 변경하면 '는 여전히'malloc'을위한 정확한 크기를 생성 할 것입니다. (다른 호출'array [i] = malloc (3 * sizeof ** array);도 마찬가지입니다.) –
그래서 내 경계를 벗어나 액세스하려고하지 않는 한 "안전"합니다. ? –