C, pasando 2 matrices dimensional

No he usado C pura en algunos años, pero parece que no puedo hacer que este caso de uso realmente básico funcione. Aquí está el caso de uso simple en C simple, la situación real está envuelta en la biblioteca HDF, pero primero debo comenzar con esto.

#include <stdio.h>

void print_data(float **data, int I, int J)
{
    for(int i=0;i<I;i++)
    {
        for(int j=0;j<J;j++)
            printf("%02.2f\t", data[i][j]);
        printf("\n");
    }
}
void initialize_data(float **data, int I, int J)
{
    for(int i=0;i<I;i++)
        for(int j=0;j<J;j++)
            data[i][j] = i * 6 + j + 1;
}
int main(int argc, char *argv[])
{
    float data[4][6];
    int I=4;
    int J=6;
    initialize_data((float **)data, 4,6);
    print_data((float **)data, 4, 6);
    return 0;
}

El programa anterior causará una falla y generará una señal EXC_BAD_ACCESS. Salidas GDB:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5fc0131a
0x0000000100000de6 in initialize_data (data=0x7fff5fbff348, I=4, J=6) at simple.c:16
16              data[i][j] = i * 6 + j + 1;

Sé que esto es realmente estúpido, simple, pero estoy en el extremo de mi ingenio tratando de resolver esta cosa simple. ¿Podría alguien apuntarme en la dirección correcta para esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta