«Я познаю мир», это главный тэг этой записи.
Допустим, хочется в C99 (в С++ такой способ тоже сработает) хочется создать двумерный массив в «непрерывной!» области памяти, чтобы в дальнейшем обращаться к его элементам как a[i][j]
:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 12;
double (*a)[n] = (double (*)[n])malloc(n * n * sizeof(double))
a[11][0] = 40.0;
printf("a[11][0] = %4.2f\n", a[11][0]);
// выход за границу массива с заползанием в следующий блок:
a[10][12] = 50.0;
printf("a[11][0] = %4.2f\n", a[11][0]);
printf("a[10][12] = %4.2f\n", a[10][12]);
return 0;
}
Подскажите, кто-нибудь, пожалуйста, как при помощи free() очистить память выделенного таким образом массива?
P.S. Казалось бы, что при создании подобного массива можно было бы описать его так:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 12;
// при присваивании, не выходя за границу массива, можно перезаписывать другие элементы:
double (*b)[1] = (double (*)[1])malloc (n * n * sizeof(double));
b[11][0] = 40.0;
printf("\nb[11][0] = %4.2f\n", b[11][0]);
// перезаписывает значение b[11][0]:
b[5][6] = 50.0;
printf("b[11][0] = %4.2f\n", b[11][0]);
printf("b[5][6] = %4.2f\n", b[5][6]);
return 0;
}