Mar*_*ger 2 c memory arrays pointers
我需要的是一个函数,修改给定指针2d矩阵,如下所示:
void intMatrixAll(int row, int col, int **matrix);
Run Code Online (Sandbox Code Playgroud)
现在,函数应该分配内存并且可以使用矩阵.行和列在运行时给出.
#include <stdio.h>
#include <stdlib.h>
#define PRINTINT(X) printf("%d\n", X);
void intMatrixAll(int row, int col, int **matrix);
int main(void) {
int testArrRow = 4;
int testArrCol = 6;
int **testMatrix = NULL;
intMatrixAll(testArrRow, testArrCol, testMatrix);
testMatrix[2][2] = 112; //sementation fault here :(
PRINTINT(testMatrix[2][2]);
system("PAUSE");
return 0;
}
void intMatrixAll(int row, int col, int **matrix) {
printf("intMatrixAll\n");
//allocate pointers:
matrix = malloc(row * sizeof(int *));
if(matrix == NULL) printf("Failed to allocate memmory.\n");
for(int i=0; i<row; i++) {
//allocate space for cols:
matrix[i] = malloc(col * sizeof(int));
if(matrix[i] == NULL) {
printf("Failed to allocate memmory for arr[%d].\n", i);
exit(0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我会收到错误?
测试矩阵仍为NULL.您需要从intMatrixAll()返回新分配的指针.从函数返回值,或传入testMatrix的地址,以便设置它.
#include <stdio.h>
#include <stdlib.h>
#define PRINTINT(X) printf("%d\n", X);
void intMatrixAll(int row, int col, int **matrix);
int main(void) {
int testArrRow = 4;
int testArrCol = 6;
int **testMatrix = NULL;
intMatrixAll(testArrRow, testArrCol, &testMatrix);
testMatrix[2][2] = 112; //sementation fault here :(
PRINTINT(testMatrix[2][2]);
system("PAUSE");
return 0;
}
void intMatrixAll(int row, int col, int ***matrix) {
printf("intMatrixAll\n");
//allocate pointers:
*matrix = malloc(row * sizeof(int *));
if(*matrix == NULL) printf("Failed to allocate memmory.\n");
for(int i=0; i<row; i++) {
//allocate space for cols:
*matrix[i] = malloc(col * sizeof(int));
if(*matrix[i] == NULL) {
printf("Failed to allocate memmory for arr[%d].\n", i);
exit(0);
}
}
}
Run Code Online (Sandbox Code Playgroud)