2 차원 배열 (또는 배열 배열)을 동적으로 할당하려고하는 C 프로그램을 작성하고 있습니다. 테이블을 할당 한 후에는 반복을 시도하지만 불법 메모리 액세스에 대한 오류를 던지고 코어 덤프를 만듭니다. I는 실험 어레이는 4 × 4,하지만 array[0][3] = 123;
설정할 때 모두 [0] [3] [1] [0]의 위치가 될 (123)를 설정테이블의 경계 값 이웃을 덮어 씁니다.
일부 조사 후 I 호기심 것을 발견했다array[1][0] = 123;
을 지정하면 정확하게 [0] [3]과 [1] [0] 모두를 rightside 값으로 설정하므로 똑같은 일이 발생합니다. 유사한 할당은 [2] [0]과 [1] [3]과 같은 "경계 값"에 대해 수행됩니다. 내 할당에 문제가있는 것 같지만, 알아낼 수는 없습니다. 필자는 이것이 멀티 - 딤 배열을 동적으로 할당하는 방법이며, 약간의 연구가이를 확인했다고 확신했습니다.
typedef struct {
int rows;
int columns;
double **data;
} matrix;
matrix* allocateMatrix(int inputRows, int inputColumns) {
matrix *matrixPointer = calloc(1, sizeof(matrix));
matrixPointer->rows = inputRows;
matrixPointer->columns = inputColumns;
#ifdef DOUBLE
matrixPointer->data = calloc(inputRows, sizeof(double*));
#else
matrixPointer->data = calloc(inputRows, sizeof(float*));
#endif
if (matrixPointer->data == NULL) {
printf("Error - inputRows value appears to be wrong.");
return NULL;
}
int i, j;
for (i = 0; i < inputRows; i++) {
#ifdef DOUBLE
matrixPointer->data[i] = calloc(inputColumns, sizeof(double));
#else
matrixPointer->data[i] = calloc(inputColumns, sizeof(float));
#endif
if (matrixPointer->data[i] == NULL) {
printf("Error - inputColumns value appears to be wrong.");
return NULL;
}
}
matrixPointer->data[2][0] = 123; //TEST CODE;
return matrixPointer;
}
및 생성 된 배열의 내용을 볼 수있는 몇 가지 코드 :
matrix *lol = allocateMatrix(4, 4);
int i, j;
for (i = 0; i < lol->rows; i++)
for (j = 0; j < lol->columns; j++)
printf("%f ", lol->data[i][j]);
을 여기에 내 코드 (나는 그것이 SSSCE해야하지만 문제는 짧은 제공 여전히 표시 할 수 없습니다 알고)입니다
내 메모리 할당이 잘못되었거나 볼 수없는 다른 문제 일 수 있습니다. 제안이나 도움에 감사드립니다. 미리 감사드립니다.
사람이 코드에서 명확한 실수를 찾지 못한 채로 실행하기로 결정했습니다. 그것은 잘 작동합니다. 코드의 최신 버전을 컴파일하고 테스트해야합니다. 문제가 해결되지 않으면 컴파일러에 "문제"가있을 수 있습니다. – Inox
오늘 다시 실행하십시오. 이것이 학술적 자료이기 때문에 나는 GCC로 그것을 컴파일하고있다. 여전히 array [1] [0]을 123으로 설정하면 [1] [0]과 [0] [3]이 모두 123으로 설정됩니다. – 3yakuya