저는 malloc과 메모리 할당에 대해 충분히 생각하고 있습니다. 나는 최근에 내가 이마를 키우는 상황을 보았습니다.Malloc은 내부 배열을 만들 필요가 없습니다.
배열로 들여다 보면서 배열 배열을 만들었습니다. 어느 쪽이 내 마음 속에 이런 식으로 보일까요? [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], ...]
외부 배열을 만들기 위해 malloc이 필요했기 때문에 이것을했을 때 생각했습니다. 나는 또한 내가 만드는 각각의 내부 배열에 대해 malloc을 호출해야했다. 나는 나에게 의미가없는이 단계를 건너 뛸 때 같은 출력을 얻는다는 것을 빨리 알았다.
다음 스크립트를 고려하십시오. 다음과 같이
int main(int argv, char* argc[]){
// initialize outer array
int* outer = malloc(5 * sizeof(int));
int i, j;
// for each slot in outer array
// create a new array and assign it
// to that slot.
// NOT NEEDED.
for(i = 0; i < 5; i++){
int* inner = malloc(5 * sizeof(int));
*(outer + i) = *inner;
}
// If I comment out the above four lines
// the output remains the same.
// assign to each slot in each inner array
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
*(outer + i * 5 + j) = j;
// print each element in each inner array
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++){
printf(
"%d ",
*(outer + i * 5 + j)
);
}
puts("");
}
}
이 스크립트의 출력은 다음과 같습니다
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
내가 기대했던 것입니다. 그러나 스크립트에서 첫 번째 for 루프를 주석 처리 할 때 동일한 출력을 얻습니다. 왜 이런거야? 내부 배열에 메모리를 할당 할 필요가 없습니까? 분명히 대답은 '아니오'지만 나는 왜 그런지 이해하려고 노력하고 있습니다.
뒤에있는 아이디어는 정확히 무엇입니까? '... = * inner;'? – alk
외부 배열의 해당 색인에 대해 @alk, 새로운 메모리 공간을 할당하십시오. – marcusshep
은 C++의 질문에도 도움이 될 수 있습니다. http://stackoverflow.com/questions/4316736/using-unallocated-memory-without-error – Cherubim