打印
[技术问答]

MA35D1 地址指针有ffff在前面会死机

[复制链接]
1900|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2024-1-10 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇到一个很奇怪的问题。 请教什么原因?

是这样的。 那个char* 地址回出去时多了ffff在前面导致死机。

================File 1================================

char globalStringValue[] ="abc";



char* getString()

{

        char* strResp = globalStringValue;

        printf("array-address= %p\n", strResp); //-->0xffffd91d2a88

        return strResp;

}



================File 2================================



void main()

{

        char* strValue = getString();

        printf("return-value-address= %p\n", strValue); //--> 0xffffffffd91d2a88

        printf("value-string= %s\n", strValue); //--> Segmentation Fault

        return;

}



=====================================================

Run:

array-address = 0xffffd91d2a88

return-value-address= 0xffffffffd91d2a88

Segmentation Fault

使用特权

评论回复
沙发
643757107| | 2024-2-28 21:59 | 只看该作者
在您提供的代码中,问题可能出在 getString() 函数中。虽然代码本身看起来并没有问题,但是在函数 main() 中对 getString() 的调用似乎导致了意外的行为。

在 getString() 中,您将 globalStringValue 的地址赋值给了 strResp,并返回了 strResp。这应该是没有问题的。但是在 main() 中,您却得到了一个奇怪的地址 0xffffffffd91d2a88,这是一个非常大的地址,显然不是您期望的。这表明在 main() 中, strValue 变量接收到了一个不正确的指针值。

导致这个问题的原因可能有几种:

使用特权

评论回复
板凳
643757107| | 2024-2-28 21:59 | 只看该作者
未初始化的指针:在某些情况下,如果未初始化的指针被使用,它们可能会指向奇怪的地址。请确保在 main() 中的 strValue 指针已经被正确初始化。

内存损坏:在代码的其他地方可能发生了内存损坏,导致指针被意外地更改为奇怪的值。请检查代码的其他部分,确保没有发生内存越界、内存泄漏或其他内存相关的问题。

编译器或链接器问题:有时,编译器或链接器可能会出现问题,导致生成的二进制文件行为异常。尝试重新编译和链接代码,或者尝试使用不同的编译器。

平台相关问题:某些平台可能存在特定的问题,例如对指针大小或符号位的处理方式不同。检查您的代码是否与您所使用的平台兼容。

使用特权

评论回复
地板
643757107| | 2024-2-28 21:59 | 只看该作者
在解决问题之前,建议您使用调试器或添加更多的调试输出,以便更好地理解问题的根本原因。




使用特权

评论回复
5
Emily999| | 2024-3-4 12:39 | 只看该作者
其实你调试的时候就用log就好了

使用特权

评论回复
6
Annie556| | 2024-3-4 13:12 | 只看该作者
如果用字符强制转换一下是不是就好点?

使用特权

评论回复
7
Charlene沙| | 2024-3-4 15:03 | 只看该作者
空指针了吧,或者是野指针

使用特权

评论回复
8
Carina卡| | 2024-3-4 16:09 | 只看该作者
还是你的指针没用对,不然也不会这样啊

使用特权

评论回复
9
Estelle1999| | 2024-3-4 17:14 | 只看该作者
你的指针是不是赋值方面出了问题

使用特权

评论回复
10
Alina艾| | 2024-3-4 18:19 | 只看该作者
感觉是你的内存部分,就是选择地址方面有点不对呢

使用特权

评论回复
11
Betty996| | 2024-3-5 08:03 | 只看该作者
为啥会多这么FF啊?

使用特权

评论回复
12
Belle1257| | 2024-3-5 09:21 | 只看该作者
这个数据也太大了吧

使用特权

评论回复
13
alxd| | 2024-3-5 11:20 | 只看该作者
建议你还是仿真一下,看看数据哪儿来的吧

使用特权

评论回复
14
B1lanche| | 2024-3-5 13:45 | 只看该作者
一般也不会死机啊,是不是你的指针的问题

使用特权

评论回复
15
ClarkLLOTP| | 2024-3-5 15:17 | 只看该作者
是不是访问非法地址了

使用特权

评论回复
16
pentruman| | 2024-3-5 21:07 | 只看该作者
在 getString() 函数中,您返回的是 strResp,它是 globalStringValue 的地址。理论上,这个地址应该是一个有效的地址,但是由于某种原因,它在返回时被破坏了。

使用特权

评论回复
17
tifmill| | 2024-3-6 07:43 | 只看该作者
应该避免在返回后修改该字符串,并在使用完毕后尽快释放内存。

使用特权

评论回复
18
adolphcocker| | 2024-3-7 12:41 | 只看该作者
在 main 函数中打印该指针时出现了 Segmentation Fault(段错误)。 访问的内存区域没有被正确映射或者已经被其他进程使用。

使用特权

评论回复
19
minzisc| | 2024-3-7 22:33 | 只看该作者
在 C 语言中,当函数返回局部变量的地址时,通常会导致问题,因为当函数执行完毕,其局部变量所占用的内存会被释放,返回的地址就不再有效。

使用特权

评论回复
20
maqianqu| | 2024-3-9 19:29 | 只看该作者
指针指向了一个数组之外的内存区域,可能会导致错误的指针值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4547

帖子

6

粉丝