gpt4 book ai didi

c - realloc 二维结构体数组

转载 作者:行者123 更新时间:2023-11-30 21:01:05 27 4
gpt4 key购买 nike

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct a // linked list node
{
char* st;
struct a* pr;
struct a* nx;
};

struct a* Init(char* w);
struct a* insert(struct a* old, char* w);

int main(void)
{
struct a** A;
A = (struct a**)malloc(sizeof(struct a*));
A[0] = Init("HELLO");
A[0] = insert(A[0], "WORLD");

// I think the problem is here.
A = (struct a**)realloc(A, 2*sizeof(struct a*));
A[1] = Init("ELLO");
A[1] = insert(A[1], "ORLD");

free(A);

return 0;
}

struct a* Init(char* w)
{
struct a* body = (struct a*)malloc(sizeof(struct a));
struct a* tail = (struct a*)malloc(sizeof(struct a));

body -> pr = NULL;
body -> nx = tail;
body -> st = w;

tail -> pr = body;
tail -> nx = NULL;
tail -> st = NULL;

return tail;
}

struct a* insert(struct a* old, char* w)
{
struct a* tail = (struct a*)malloc(sizeof(struct a*));

old -> nx = tail;
old -> st = w;
tail -> pr = old;
tail -> nx = NULL;
tail -> st = NULL;

return tail;
}

(我删节了我的代码)
我构造了二维结构数组,但是这段代码一直给我一个错误,段错误。

我认为问题出在这里。

A = (struct a**)realloc(A, 2*sizeof(struct a*));

但我不知道为什么这是错误的。有什么想法吗?

提前致谢!

最佳答案

insert() 函数中,这一行仅为一个指针分配了空间

struct a* tail = (struct a*)malloc(sizeof(struct a*));

另一方面,struct a 有三个指针,因此在典型环境中它的大小将大于一个指针的大小。

因此,会发生一些超出范围的访问。尝试像在 Init() 函数中那样分配 sizeof(struct a)

关于c - realloc 二维结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37040218/

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