Возможно, это я нуб, но ....
Я пытаюсь использовать двумерный массив, который выделяется динамически.Я следовал методу, показанному здесь , где они делают обходной путь, используя массив с одним размером, равным «Row x Column».
Когда я делаю некоторое тестирование, я заполняю все позициимассива с номером 2, а затем я получил доступ к отдельным позициям и изменил их на 9, чтобы посмотреть, где A (1), A (2), A (3) и т. д. по отношению кодно измерение.
Все идет, как и ожидалось, пока я не попытаюсь изменить A [5], когда я это сделаю, две позиции массива перезаписываются, а не просто 5. Есть идеи о том, что происходит?
Кстати, обращение к позициям массива через "A [5] и A [4]" против "* (A + 5) и * (A + 4)" дает одинаковые результаты.
Спасибо за любую помощь!:)
Это:
int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);
int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+5)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}
Результатов это: Доступ к A [5]
Но это:
int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);
int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+4)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}
Результатов это: Доступ к A [4]