gpt4 book ai didi

C. 函数修改动态分配的二维数组时的段错误

转载 作者:行者123 更新时间:2023-12-03 23:49:28 25 4
gpt4 key购买 nike

我需要的是一个像这样修改给定的二维矩阵指针的函数:

void intMatrixAll(int row, int col, int **matrix);

现在,函数应该分配内存并且可以使用矩阵。行和列在运行时给出。

#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);
}
}
}

为什么会出现错误?

最佳答案

测试矩阵仍然是 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);
}
}
}

关于C. 函数修改动态分配的二维数组时的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com