c-使用结构中的指针(成员)进行动态内存分配时出现分段错误(核心转储)



我正在使用以下代码;arr[0]->p=(int*(malloc(m*sizeof(int(("我有";分段故障(堆芯转储(";。我需要用这种方式写代码。。。

有人能帮我写这个吗?为什么我的代码会有这个错误?

#include <stdio.h>
#include <stdlib.h>
typedef struct data{
int *p;
}data;
void main(){
int n = 10, 
m = 5 ;

data **arr = (data**)malloc(n * sizeof(struct data*));
arr[0]->p = (int *)malloc(m * sizeof(int));
}

像这样的东西,它工作

/************************************************************
*                                                           *
*      data *arr = (data*)malloc(sizeof(struct data));      *
*      arr->p = (int *)malloc(m * sizeof(int));             *
*                                                           *
*************************************************************/

您不需要指针数组。分配一个structs数组,然后为structs的p成员分配内存。

data *arr = malloc(n * sizeof(data));
for (int i = 0; i < n; i++) {
arr[i].p = malloc(m * sizeof(int));
}

如果你真的需要一个指针数组,你需要为每个指针指向的结构分配内存

data **arr = malloc(n * sizeof(data*));
for (int i = 0; i < n; i++) {
arr[i] = malloc(sizeof(struct data));
arr[i]->p = malloc(m * sizeof(int));
}

最新更新