昨天在我的采访中我被问到这个问题.(当时我被这么多突然的问题压得很厉害).
int *p;
*p=23;
printf("%d",*p);
Run Code Online (Sandbox Code Playgroud)
这段代码有问题吗?
我向他解释说你正在尝试为没有分配内存的指针赋值.
但他的反应方式,就像我错了.虽然我得到了这份工作,但在那之后他说Mohit再次考虑这个问题.我不知道他想说什么.请让我知道我的答案有什么问题吗?
编辑 我在表格上添加了代码; -
int *p;
p=malloc(sizeof(int));
*p=23;
printf("%d",*p);
Run Code Online (Sandbox Code Playgroud)
这一定是完美的代码...我是对的..
EDIT2
int *p;
*p=23;
OR
int *p=23;
Run Code Online (Sandbox Code Playgroud)
我认为两者都有问题.因为有些正在讲述帖子的标题.
Ste*_*sop 28
"尝试为未分配内存的指针赋值"
我想你只是误解了一下.您不是要尝试为指针赋值,而是尝试为指针的referand赋值.
由于指针未初始化,正如您所说,这是未定义的行为.指针不引用任何东西(至少不是有效的 - 正如其他答案所指出的那样,存储的位p可能恰好包含一个值,这是某个内存位置的地址,而你的代码可能会覆盖它.标准允许任何事情发生在UB,但了解你的实现,你通常可以采取精明的猜测).
因此,在面试官的脑海中,你可能有正确的想法,但是在你的思想中和你的演讲中直截了当地指出手指和月亮之间的差异以及你正在谈论的是哪一个是很有价值的.
sha*_*oth 14
p未初始化 - 它存储了一些地址.取消引用它是未定义的行为.
存储的地址p可以映射到进程的地址空间中,或者可以不映射.如果映射了一些不相关的(但对程序可能很重要)数据存储在该地址.因此,由于内存保护,您的程序会立即崩溃,或者您更改属于该程序的某些数据.后者的后果可能会有所不同 - 也许没有任何反应,也许你没有注意到,也许你破坏了重要数据并且程序分崩离析 - 经典的未定义行为.