gpt4 book ai didi

c - 尝试访问结构数组成员时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:33 24 4
gpt4 key购买 nike

typedef struct abc {
unsigned int pref;
unsigned int port;
char *aRecordIp;
int index;
int count;
}abc_t;

typedef struct xyz {
abc_t *ab;
int index;
int count;
}xyz_t;


int Lookup (char *lookup,xyz_t **handle) {

*handle = (xyz_t *)malloc(sizeof(xyz_t *));
(*handle)->ab = (abc_t *) malloc(5*sizeof(abc_t *));
//
(*handle)->ab[0].pref = 10; //seg fault here
}


void *myhandle;

//这是一个空指针,我无法更改它,因为它也在其他地方使用

char lookup;


Lookup(&lookup, &myhandle);

//我在这里收到一个很明显的警告,但我该如何处理呢

最佳答案

该错误是更喜欢 ptr = malloc (count * sizeof *ptr); 符号的一个很好的理由; 编译器已经知道表达式的类型和大小,因此您不必再次指定:

int Lookup (char *lookup,xyz_t **handle) {

*handle = malloc(sizeof **handle);
(*handle)->ab = malloc(5 * sizeof *(*handle)->ab );
(*handle)->ab[0].pref = 10; //seg fault here
}

或者,使用数组符号(只是为了避免难看的 *(*handle)):

int Lookup (char *lookup,xyz_t **handle) {

*handle = malloc(sizeof **handle);
(*handle)->ab = malloc(5 * sizeof (*handle)->ab[0] );
(*handle)->ab[0].pref = 10; //seg fault here
}

注意:我还删除了不需要且有潜在危险的石膏。

另请注意,此文体更正将修复两个错误。

关于c - 尝试访问结构数组成员时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com