다음 코드를 디버깅하려고 시도하고 "액세스 위반"오류가 발생합니다. 첫 번째 루프가 모든 요소에 액세스 할 수있는 동안 요소의 두 번째 행에 액세스 할 때 왜 두 번째 루프가 실패하는지 이해할 수 없습니다.2D 배열 액세스 위반
나는 *
, &
및 []
을 엉망으로 만들고 있지만 알아낼 수는 없습니다.
감사합니다.
#include <iostream>
void a(const int* data, unsigned int nElements, unsigned int nColumns) {
for (unsigned int i = 0; i < nElements; ++i)
std::cout << data[i];
for (unsigned int i = 0; i < nElements/nColumns; ++i)
for (unsigned int j = 0; j < nColumns; ++j)
std::cout << (&data)[i][j];
}
int main() {
int arr[2][5] = {
{ 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9 }
};
a(*arr, 2 * 5, 5);
return 0;
}
조금 더 노력하려고 설명해 주시겠습니까? 다소 불분명합니다. – Ben
실제 문제는 여기에 있습니다 : (& data) [i]. 데이터는 인수의 단일 요소이기 때문에 & data는 단일 요소에 대한 포인터입니다. 이것은 i> 0이 문제라는 것을 의미합니다. 다차원 배열은 실제로는 메모리 블록이며 다차원 배열에서 [i] [j]를 수행하면 컴파일러에서 포인터 배열에 대해 [i] [j]와 다르게 처리합니다. 다차원 배열의 [i] [j]는 [i * numcolumns + j]와 같습니다. – thang