gpt4 book ai didi

C指针类型转换: single int pointer to double char pointer

转载 作者:行者123 更新时间:2023-11-30 17:26:29 25 4
gpt4 key购买 nike

我正在尝试执行以下操作,它不会给我编译错误,但在运行时给我一个段错误。

int main(){
int * ptr;
*ptr = 254;
char **ch = (char **)ptr;
printf("\n%x\n",**ch);
}

我基本上想知道这样的事情是否合法,如果合法的话它会做什么。

*(char **)ptr

其中ptrint类型或void类型

最佳答案

*ptr = 254;这里ptr没有分配内存,这就是产生段错误的原因。

首先需要为ptr分配内存,然后可以将一些值放入*ptr中。

接下来,*(char **)ptr 不合法(char **ch = (char **)ptr; 也不合法,顺便说一句)。如果您在启用警告的情况下进行编译,您将收到一些警告消息

warning: initialization from incompatible pointer type

如果您尝试分析任一变量的数据类型,您就可以轻松理解这一点。考虑示例代码

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

int main(){
int * ptr = malloc(4);
*ptr = 254;
char **ch = (char **)ptr;
printf("\n%x\n",**ch);
}

要检查,如果您编译并单步执行调试器,您可以看到,

5           int * ptr = malloc(4);
(gdb) s
6 *ptr = 254;
(gdb)
7 char **ch = (char **)ptr;
(gdb) p ptr
$1 = (int *) 0x804a008
(gdb) p ch
$2 = (char **) 0xa7c600
(gdb) p *ch
$3 = 0x57e58955 <Address 0x57e58955 out of bounds>
(gdb) p **ch
Cannot access memory at address 0x57e58955

关于C指针类型转换: single int pointer to double char pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772287/

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