c - 2d矩阵分配函数segfault(参数返回的矩阵)

标签 c arrays 2d malloc exc-bad-access

我在尝试写入使用以下函数分配的矩阵的第二行(段错误 exc_bad_accesskern_invalid_address)时遇到问题:

这是我的分配函数:

int amatrix(char*** m, const int i, const int j) 
{

    int k;

    (*m) = (char**) malloc(sizeof(char*) * i);
    if ((*m) == NULL) {
        return ERROR;
    }

    for (k = 0; k < i; k++) {
        (*m)[k] = (char*) malloc(sizeof(char) * j);
        if ((*m)[k] == NULL) {
            return ERROR;
        }
    }

    return SUCCESS;
}

我使用以下方式调用它:

char** matrix;
if (amatrix(&matrix, i, j)) { ...

编辑: 根据要求:

#define ERROR 00
#define SUCCESS 01

问题所在的访问:

int gmatrix(char*** m, const int i, const int j)
{
int k, l;

for (k = 0; k < i; k++) {
    for (l = 0; l < j; l++) {
        printf("Matrix[%d][%d] = ", k, l);
        scanf(" %c", m[k][l]);
    }
}

return SUCCESS;
}

感谢您的快速回复!

最佳答案

您的gmatrix函数应将m作为char**参数,而不是char***,因为它不需要像 amatrix 那样更改其值(仅更改其指向的值)。

那么您应该将 scanf 调用更改为:

scanf(" %c", &m[k][l]);

您当前的代码(使用char*** m)不起作用,因为当k!=0<时m[k]将给出未定义的行为,因为 m 仅指向单个 char**

如果 mchar***,则 scanf 调用需要如下所示:

scanf(" %c", &(*m)[k][l]);

关于c - 2d矩阵分配函数segfault(参数返回的矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270899/

相关文章:

opencv - 在Opencv(2D)中计算点的重投影误差

c - 在 emacs 中突出显示整个 c/cpp 宏定义?

Javascript 数组或对象

javascript - cssRules 无法读取多个样式表类属性值

c - 2维指针存储字符串

java - 如何在绘画时改变颜色(图)

c - 为什么数组大小可以访问,但动态分配的内存大小在运行时无法访问?

C - 从大字符串中的标准输入一次读取一个字符

有条件的不遵循 C 中的指令

php - PHP中如何获取Mysql查询结果中最小值列的字段名