首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维矩阵碰撞的动态去分配

二维矩阵碰撞的动态去分配
EN

Stack Overflow用户
提问于 2022-01-10 23:06:07
回答 4查看 69关注 0票数 0

我有一个函数在开始分配2D矩阵,一个函数释放它,我在结尾使用它。

代码语言:javascript
复制
int** CreatMat(int N){
    int i,**T;
    T = (int**)malloc(sizeof(int*)*N);
    if(T!=NULL){
        for(i=0;i<N;i++){
            T[i]=(int*)malloc(sizeof(int)*N);
            if(T[i]==NULL){
                printf("\nCreatMat()::Allocation failed at block %d",i);
                for(i=i;i>=0;i--){
                    free(T[i]);
                    T[i]=NULL;
                }
                free(T);
                T=NULL;
                return T;
            }
        }
    }
    return T;
}

//Free a dynamic matrix.
void FreeMat(int** T,int N){
    int i;
    for(i=0;i<N;i++){
        free(T[i]);
        T[i]=NULL;
    }
    free(T);
    T = NULL;
}

不知怎么的,FreeMat()崩溃了。有什么帮助吗?

全码这里

~janky修复代码这里

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-01-10 23:52:59

在函数main()

代码语言:javascript
复制
int **T, **S;
if(Grids_Init(T, S) != 0)

不影响未初始化的局部变量ST的值,然后继续释放这些不确定的指针。

您可以使用一个函数初始化其中一个指针,返回指针并将其赋值给TS也是如此。

这比使用三星级指针更好:请参阅C中的三重指针:这是一个风格问题吗? One答案。

使用三重指针会损害可读性和可维护性。

票数 0
EN

Stack Overflow用户

发布于 2022-01-11 01:27:54

您不创建2D数组,只创建一个指针数组。使您的生活更容易,并找到一个真正的2D数组。此外,对size_t大小使用正确的类型

代码语言:javascript
复制
void CreatMat(size_t N, int (**array)[N])
{
    *array = malloc(N * sizeof(**array));
}

int main(void)
{
    int (*array)[N];
    CreatMat(1000, &array);

    /* some code */

    free(array);
}

看看有多简单。

票数 0
EN

Stack Overflow用户

发布于 2022-01-11 14:19:08

对@0_______的回应

代码语言:javascript
复制
#include <stdlib.h>

int main(){
    int i,j;
    int (*T)[7];
    //(*T)[7] = malloc(7*sizeof(&(*T))); is wrong
    T = malloc(7*sizeof(*T));
    for(i=0;i<7;i++){
        printf("\n");
        for(j=0;j<7;j++){
            printf("%d  ");
        }
    }
    free(T);

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70659871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档