c - 函数返回指向结构分段错误的指针
问题描述
我正在研究一个处理结构并具有操作给定结构的各种功能的项目。
我从我的初始函数开始,它只是为结构分配内存,初始化结构中的每个项目,然后返回一个指向结构的指针。我已经在我的头文件中定义了结构。然后我有一个主文件,我最终将使用它来运行我的所有功能,但是我在运行第一个时遇到了麻烦,每次运行它时都会出现故障。
标题:
#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 故障
解决方案
您正在为每个 分配空间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);
推荐阅读
- python - RNN:了解连接层
- java - java LRU缓存:带有时间戳的LinkedHashMap?
- java - 有没有办法将 Java8 Optional 返回值与在 null 上打印消息相结合?
- html - JPA、nativeQuery 的值如上图所示
- dropdown - 下拉列的 JPA 实体(如何填充下拉列表)
- sql-server - 使用 VB.Net 和 Dataset 或 Datatable 将数据从 Excel 导入 SQL Server
- python - 在 all-auth 注册中创建多个用户角色
- math - 如何在圆上给定一个点找到和弦的坐标
- css - 如果将 1fr 与 minmax() 一起使用,如何防止网格图像变得太大
- python - 如何选择轴中的第一个和最后一个刻度标签并定义它之间的主要刻度数?