首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >int *p;*p=23;有什么问题?

int *p;*p=23;有什么问题?
EN

Stack Overflow用户
提问于 2010-03-29 21:22:42
回答 7查看 3.1K关注 0票数 15

在昨天的面试中,我被问到了这个问题。(当时我被这么多突如其来的问题给了很大压力)。

代码语言:javascript
复制
int *p;
*p=23;
printf("%d",*p);

这段代码有什么问题吗?

我向他解释说,您正在尝试为未分配内存的指针赋值。

但他反应的方式,好像我错了。虽然我得到了这份工作,但在那之后,他说莫希特再考虑一下这个问题。我不知道他想说什么。请让我知道我的回答中有什么问题吗?

编辑我在工作表上添加了代码;-

代码语言:javascript
复制
int *p;
p=malloc(sizeof(int));
*p=23;
printf("%d",*p);      

这一定是完美的code...Am I对吧..

EDIT2

代码语言:javascript
复制
int *p;
*p=23;
 OR
int *p=23;

我认为两者都有问题。因为有人在说这篇文章的标题。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-03-29 21:24:43

“尝试为未分配内存的指针赋值”

我想你只是说错了一点。你不是想给指针赋值,你是想给指针的被引用赋值。

由于指针未初始化,因此,正如您所说,这是未定义的行为。指针没有指向任何东西(至少不是有效的-正如其他答案指出的那样,p的存储位可能恰好包含某个内存位置的地址的值,并且您的代码可能会覆盖该值。这个标准允许UB发生任何事情,但如果你知道一些关于你的实现的事情,你通常可以做出一个精明的猜测)。

因此,在面试官的脑海中,你可能有正确的想法,但在你的脑海中准确地记住这一点是有价值的,在你的演讲中,手指和月亮之间的区别是什么,以及你说的是哪一个。

票数 28
EN

Stack Overflow用户

发布于 2010-03-29 21:25:46

p未初始化-它存储了一些地址。取消引用它是未定义的行为。

存储在p中的地址可以映射到进程的地址空间,也可以不映射。如果它被映射,一些不相关(但对程序可能很重要)的数据将存储在该地址。因此,要么你的程序因为内存保护而立即崩溃,要么你改变了属于该程序的一些数据。后者的后果可能会有所不同--也许什么都没发生,也许你没有注意到,也许你破坏了重要的数据,程序崩溃了--典型的未定义行为。

票数 14
EN

Stack Overflow用户

发布于 2010-03-29 21:32:31

“p”指向未知位置,而不是指向“未分配”的内存。

不同之处在于,因为它是未定义的,所以它可以指向一个分配的内存,即使这个内存不打算被这个函数访问。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2538152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档