函数返回指针到结构分段错误

时间:2020-02-07 05:03:44

标签: c struct segmentation-fault

我正在从事一个处理结构的项目,该项目具有操纵给定结构的各种功能。

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

标题:

#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);

}

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

是什么原因导致段故障

1 个答案:

答案 0 :(得分:3)

您正在为每个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);
相关问题