gpt4 book ai didi

c - 包含两个双指针的结构体,访问第二个双指针时出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:35:33 26 4
gpt4 key购买 nike

我正在尝试访问第二个双指针,但仅在访问第一个双指针后才立即出现段错误。这是怎么回事?

它似乎可以在没有第二个双指针的情况下工作,但我不知道为什么。

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

struct queue{
int ** x;
int ** y;
};

struct queue funct1(){
struct queue me;
int * x = malloc(sizeof(int));
int * y = malloc(sizeof(int));

*x = 20;
*y = 40;
me.x = &x;
me.y = &y;
return me;
}


int main(void){
struct queue hello;

hello = funct1();

printf("%d\n", *(*(hello.x)));
printf("%d\n", *(*(hello.y)));
}

预计:2040

实际:20段错误:11

编辑:

看来还是不行啊。我已将此代码添加到函数中:

    int ** xpointer = malloc(sizeof(int*));
int ** ypointer = malloc(sizeof(int*));

*x = 20;
*y = 40;
xpointer = &x;
ypointer = &y;

me.x = xpointer;
me.y = ypointer;

编辑2:这似乎有效。

struct queue funct1(){
struct queue me;
int * x = malloc(sizeof(int));
int * y = malloc(sizeof(int));

int ** xpointer = malloc(sizeof(int*));
int ** ypointer = malloc(sizeof(int*));

*x = 20;
*y = 40;
*xpointer = x;
*ypointer = y;

me.x = xpointer;
me.y = ypointer;

return me;
}

最佳答案

一旦函数退出,指向函数局部变量的指针就不再有效,但您的 funct1 函数会将此类指针保存在稍后使用的位置。特别是,funct1返回后,访问*(hello.x)*(hello.y)都是无效的,只能通过巧合的是,第一个有效。

关于c - 包含两个双指针的结构体,访问第二个双指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469503/

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