指针在定义的同时有没有分配内存,为什么? 我们老师只给我们说在定义时没有分配内存,但没有说为什么?

2025-06-28 00:04:15
推荐回答(5个)
回答1:

#include
#include //分配内存时用到的头文件
void main()
{
int a=20,*p; //这里定义了一个整型指针,但没赋初值,这时我们叫这个指针为野指针
printf("%d->%p\n", a, p); //观察%p是输出一个地址数据
p=NULL;
printf("%d->%p\n", a, p);
p=&a;
printf("%d->%p:%d\n", a, p, *p);
p=(int *)malloc(sizeof(int));
printf("%d->%p:%d\n", a, p, *p);
*p=30;
printf("%d->%p:%d\n", a, p, *p);
}

认真观察这个程序及输出结果
如果只定义指针,没有初始化系统是不会给它分配内存的,初始化后,只是指向某个内存而已,没有初始化的指针是指向一个未知的内存地址,这样的指针是很危险的。一般我们定义一个指针变量就会给它初始化为空,以免造成的危险无法补救。
第11行就是给指针P分配内存了,这是C语言中的规定,没有为什么的。
分配内存之后它再也不指向a变量的内存地址,而是指向一个新的内存地址。

回答2:

定义了一个指针:char *p;
系统要首先为这个指针变量分配一个4个字节的地址,这个时候我们可以用 printf("%0xd", p);来输出十六进制的值看看。
而这个地址存放的内容就是该指针指向的地址,定义的时候并没有赋值,所以指针指向的地址是不可预料的,这样的指针成为野指针。
所以在申请变量的时候最好char *p = NULL;

回答3:

int i=5;
int *p; 只定义了指针p
*p=9; 不允许,因为p没有指向任何内存
p=&i; p指向内存中i的位置
*p=9; i等于9
由*p=9;分析,p指向的地址需要另外分配,而不是定义p 时自动分配

回答4:

因为你没有定义PROCESS_ALL_ACCESS!!
并且CloseHandle hProcess 在你这里多余

'定义PROCESS_ALL_ACCESS:
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Public Const PROCESS_ALL_ACCESS As Long = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF

还有,以后编程请在通用那里加入‘Option Explicit’语句
另外,团IDC网上有许多产品团购,便宜有口碑

回答5:

因为你没有定义PROCESS_ALL_ACCESS!!
并且CloseHandle hProcess 在你这里多余

'定义PROCESS_ALL_ACCESS:
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Public Const PROCESS_ALL_ACCESS As Long = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF

还有,以后编程请在通用那里加入‘Option Explicit’语句