如何在函数中分配双指针的内存?
How to allocate memory of a double pointer in a function?
我正在尝试为 main
函数中声明的双指针分配内存:
int main () {
float **a, **b, **c;
inicializarMatriz (&a, &b, &c);
}
在 inicializarMatriz
函数内部应该 malloc 矩阵(双指针)。
void inicializarMatriz(float ***a, float ***b, float ***c) {
// Reservar espacio de memoria para la matriz a
**a = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
a[i] = (float *) malloc ( N * sizeof(float) );
}
if ( a == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
}
// Reservar espacio de memoria para la matriz b
**b = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
b[i] = (float *) malloc ( N * sizeof(float) );
}
if ( b == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
}
// Reservar espacio de memoria para la matriz c
**c = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
c[i] = (float *) malloc ( N * sizeof(float) );
}
if ( c == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
}
}
我收到此警告:[Warning] assignment from incompatible pointer type
并且程序崩溃。知道哪里出了问题吗?
正如@SomeProgrammerDude 所建议的,接下来是工作代码:
int main () {
float **a, **b, **c;
inicializarMatriz (&a, &b, &c);
}
void inicializarMatriz(float ***a1, float ***b1, float ***c1) {
// Reservar espacio de memoria para la matriz a
*a1 = (float **) malloc ( N * sizeof(float *) ); // *a1 = **a
for (int i = 0; i < N; ++i) {
(*a1)[i] = (float *) malloc ( N * sizeof(float) ); // (*a1)[i] = a[i]
}
if ( a == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
}
// Reservar espacio de memoria para la matriz b
*b1 = (float **) malloc ( N * sizeof(float *) ); // *b1 = **b
for (int i = 0; i < N; ++i) {
(*b1)[i] = (float *) malloc ( N * sizeof(float) ); // (*b1)[i] = b[i]
}
if ( b == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
}
// Reservar espacio de memoria para la matriz c
*c1 = (float **) malloc ( N * sizeof(float *) ); // *c1 = **c
for (int i = 0; i < N; ++i) {
(*c1)[i] = (float *) malloc ( N * sizeof(float) ); // (*c1)[i] = c[i]
}
if ( c == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
}
}
问题的解决方案在最后的同一行中。
我正在尝试为 main
函数中声明的双指针分配内存:
int main () {
float **a, **b, **c;
inicializarMatriz (&a, &b, &c);
}
在 inicializarMatriz
函数内部应该 malloc 矩阵(双指针)。
void inicializarMatriz(float ***a, float ***b, float ***c) {
// Reservar espacio de memoria para la matriz a
**a = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
a[i] = (float *) malloc ( N * sizeof(float) );
}
if ( a == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
}
// Reservar espacio de memoria para la matriz b
**b = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
b[i] = (float *) malloc ( N * sizeof(float) );
}
if ( b == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
}
// Reservar espacio de memoria para la matriz c
**c = (float **) malloc ( N * sizeof(float *) );
for (int i = 0; i < N; ++i) {
c[i] = (float *) malloc ( N * sizeof(float) );
}
if ( c == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
}
}
我收到此警告:[Warning] assignment from incompatible pointer type
并且程序崩溃。知道哪里出了问题吗?
正如@SomeProgrammerDude 所建议的,接下来是工作代码:
int main () {
float **a, **b, **c;
inicializarMatriz (&a, &b, &c);
}
void inicializarMatriz(float ***a1, float ***b1, float ***c1) {
// Reservar espacio de memoria para la matriz a
*a1 = (float **) malloc ( N * sizeof(float *) ); // *a1 = **a
for (int i = 0; i < N; ++i) {
(*a1)[i] = (float *) malloc ( N * sizeof(float) ); // (*a1)[i] = a[i]
}
if ( a == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz a");
}
// Reservar espacio de memoria para la matriz b
*b1 = (float **) malloc ( N * sizeof(float *) ); // *b1 = **b
for (int i = 0; i < N; ++i) {
(*b1)[i] = (float *) malloc ( N * sizeof(float) ); // (*b1)[i] = b[i]
}
if ( b == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz b");
}
// Reservar espacio de memoria para la matriz c
*c1 = (float **) malloc ( N * sizeof(float *) ); // *c1 = **c
for (int i = 0; i < N; ++i) {
(*c1)[i] = (float *) malloc ( N * sizeof(float) ); // (*c1)[i] = c[i]
}
if ( c == NULL ) {
fprintf(stderr, "No se ha podido asignar memoria a la matriz c");
}
}
问题的解决方案在最后的同一行中。