【发布时间】:2013-03-22 21:08:02
【问题描述】:
代码如下:
#include <stdio.h>
#include <stdlib.h>
void foo(int* ptr) {
printf("ptr is %x\n", ptr);
}
void main() {
int* ptr = (int*)malloc(sizeof(int));
printf("ptr is %x\n", ptr);
foo(ptr);
free(ptr);
}
...他就是输出:
ptr is 0x007446c0
ptr is 0x00000000
...问题是:
为什么会发生在我身上???
【问题讨论】:
-
冒着与其他人一样破纪录的风险,不要在 C 中强制转换 malloc() -- 使用 "int* ptr = malloc( sizeof( int ) );"
-
@Jacob Spire 看到这个:stackoverflow.com/questions/1565496/…
-
@JacobSpire 我在
Visual C++ 2010 Express上尝试了你的程序,我得到了正确的打印。你确定你得到的第二个数字是 0x0 吗? -
@Ganesh - 由于可修改左值的答案,您看到的值可能会有所不同,传递错误的格式说明符是 UB。
-
@Mike.. 谢谢.. 为什么要使用
%x格式说明符打印0x0而不是其他一些junk值?
标签: c visual-studio-2010 pointers memory parameters