gpt4 book ai didi

c - 双指针和内存分配

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

我有一个使用双指针来制作矩阵的结构:

typedef struct
{
int rows, cols;
int** element;
}Matrix;

我正在编写一个函数,通过为该结构动态分配内存来初始化矩阵。这是我编写的代码,但是当我尝试访问另一个函数或 main 中的 a->rows、cols 或元素时出现段错误。

void matrixInit (Matrix* ma, int m, int n)
{ int i;
ma=(Matrix*)malloc(sizeof(Matrix));
ma->rows=m;
ma->cols=n;

ma->element=malloc(m*sizeof(int*));
for(i=0;i<m;i++)
{ma->element[i]=malloc(n*sizeof(int));
}

}

有什么帮助吗?

最佳答案

在 C 中,每个函数参数都是按值传递的。这意味着当您为函数提供参数时,值的副本(而不是值本身)将作为函数的参数传递。这包括指针 - 您可以更改指针所指的任何内容并且没有问题,但如果您将指针设置为指向函数中的其他内容,则更改仅适用于指针的本地副本。

ma=(Matrix*)malloc(sizeof(Matrix));

这里,不是让输入指针指向一个新分配给Matrix结构的内存,你实际上是用一个新指针覆盖本地指针ma对输入指针做任何事情。这导致了问题。要解决此问题,您可以改为返回指向 ma 的指针。

关于c - 双指针和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434287/

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