我正在从事一个处理结构的项目,该项目具有操纵给定结构的各种功能。
我从我的初始函数开始,该函数只是为该结构分配内存,并初始化该结构中的每个项目,然后返回指向该结构的指针。我已经在头文件中定义了该结构。然后,我有一个主文件,最终将用它来运行所有功能,但是我在运行第一个文件时遇到了麻烦,每次运行它都会出现段错误。
标题:
#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);
}
我花了一段时间寻找可能的问题,但是从逻辑上讲,一切对我来说都是正确的。
是什么原因导致段故障
答案 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);