Я использую malloc
для динамического выделения памяти, используйте memset
для инициализации 2D-массива и используйте free
для освобождения памяти.Код:
int n1=2,n2=5;
int in1;
float **a;
a = (float **)malloc(n1*sizeof(float *));
for (in1=0;in1<n1;in1++)
a[in1] = (float *)malloc(n2*sizeof(float));
memset(a[0],0,n1*n2*sizeof(float));
free(*a);free(a);
Первая проблема при запуске кода: * Ошибка в `./try1 ': free (): неверный следующий размер (быстрый): 0x0000000000c06030 *
Второй вопрос: поскольку для использования memset
необходимо наличие смежной памяти.Вот почему он не работает с трехмерным массивом (см. Ошибка в memset () трехмерного массива ).Но здесь a
- это двумерный указатель или массив, входные данные memset
равны a[0]
.Насколько я понимаю:
+---------+---------+-----+--------------+
| a[0][0] | a[0][1] | ... | a[0][n2 - 1] |
+---------+---------+-----+--------------+
^
|
+------+------+-----+-----------+
| a[0] | a[1] | ... | a[n1 - 1] |
+------+------+-----+-----------+
|
v
+---------+---------+-----+--------------+
| a[1][0] | a[1][1] | ... | a[1][n2 - 1] |
+---------+---------+-----+--------------+
На рисунке выше показана непрерывная память.Таким образом, memset(a[0],0,n1*n2*sizeof(float));
может успешно инициализировать **a
.Я прав?Если это не смежно, как инициализация может быть успешной?(из протестированного открытого исходного кода)