gpt4 book ai didi

C - 创建动态矩阵函数的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:19 27 4
gpt4 key购买 nike

我在 main 中创建了一个动态矩阵,但后来决定最好实现一个函数,以便在必要时更容易地创建更多矩阵。我将我的代码移向函数,但还不够好。

一旦我尝试写入 M[0][0],我的程序就会崩溃。

这是我编译的方式(没有错误):gcc -Wall -std=c99 -o output.exe source.c

#include <stdio.h>
#include <stdlib.h>

void MakeMATRIX (int** MATRIX, int* ROW, int* COL);

int main()
{
int SIZE;
scanf("%d", &SIZE);

int** M = NULL;

MakeMATRIX(M, &SIZE, &SIZE);

---MORE CODE GOES HERE---

scanf("%d", &M[0][0]);

return 0;
}

void MakeMATRIX (int** MATRIX, int* ROW, int* COL)
{
MATRIX = (int **)malloc(*ROW * sizeof(int*));

for (int i = 0; i < *ROW; i++)
{
MATRIX[i] = (int *)malloc(*COL * sizeof(int));
}
}

最佳答案

您应该从 MakeMatrics 函数返回分配的矩阵。

int ** MakeMATRIX (int** MATRIX, int* ROW, int* COL)
{
MATRIX = (int **)malloc(*ROW * sizeof(int*));

for (int i = 0; i < *ROW; i++)
{
MATRIX[i] = (int *)malloc(*COL * sizeof(int));
}

return MATRIX;
}

并且在 main()

M = MakeMATRIX(M, &SIZE, &SIZE);

否则,您可以传递 &M 并在 *MATRIX 而不是 MATRIX 中分配。

M 的代码值不会在 main() 中改变,因为它是按值传递的,即使它是指针,您也将它作为值传递。

并将其分配给 NULL 当您尝试取消引用它时会出现段错误。

关于C - 创建动态矩阵函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21950259/

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