首页 > 解决方案 > 函数返回指向结构分段错误的指针

问题描述

我正在研究一个处理结构并具有操作给定结构的各种功能的项目。

我从我的初始函数开始,它只是为结构分配内存,初始化结构中的每个项目,然后返回一个指向结构的指针。我已经在我的头文件中定义了结构。然后我有一个主文件,我最终将使用它来运行我的所有功能,但是我在运行第一个时遇到了麻烦,每次运行它时都会出现故障。

标题:

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

struct Double_Array{
    double** array;
    int rowsize;
    int colsize;
};

struct Double_Array* double_array(int,int);

功能:

#include "header.h"


struct Double_Array* double_array( int row, int col){

    int i;

    struct Double_Array* ptrDouble_Array;

    ptrDouble_Array = (struct Double_Array*) malloc(sizeof(struct Double_Array));

    ptrDouble_Array -> rowsize = row;

    ptrDouble_Array -> colsize = col;
    for(i=0;i< ptrDouble_Array -> colsize ; i++){
        ptrDouble_Array -> array[i] = malloc((sizeof(double))*(row));
    }
    return(ptrDouble_Array);
}

主线:

#include "header.h"


int main(){
    srand(time(0));
    printf("running");
    int i;
    int j;
    struct Double_Array* ptr;

    ptr = double_array( 5, 5);

    for(i=0;i<5;i++){
        free(ptr->array[i]);
    }
    free(ptr);

    return(0);

}

我花了一段时间寻找可能的问题,但对我来说一切在逻辑上都是正确的。

是什么导致了 Seg 故障

标签: cstructsegmentation-fault

解决方案


您正在为每个 分配空间array[i],但您从不为array. ptrDouble_Array->array[i]取消引用未初始化的指针也是如此,这会导致段错误。

添加分配:

ptrDouble_Array->array = malloc((sizeof(double *))*(col));
for(i=0;i< ptrDouble_Array->colsize ; i++){
    ptrDouble_Array->array[i] = malloc((sizeof(double))*(row));
}

不要忘记free它:

for(i=0;i<5;i++){
    free(ptr->array[i]);
}
free(ptr->array);
free(ptr);

推荐阅读