请问这个程序有没错误

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:34:25
void main(void)
{
char *str=NULL;

strcpy(str,"hello world");
printf("%s",str);
}
上面程序有没有错误啊?
另:p=(char *)malloc(100);p是指向堆内存,p本身是分配在堆还是栈上?
下面两个为大虾
p 到底是堆上的指针变量还是栈上的指针变量
你们说的好象不一样啊!!!

p本身存储在栈内存,而p指向的是堆内存的一片区域.
char *p=0; //&p在栈内存,p指向0
p = malloc(100); //p指向了堆内存

------------------------
1.
char *str=NULL;
strcpy(str,"hello world");
可以编译通过,但是str是空指针,将导致运行时错误.

2.
p=(char *)malloc(100);
动态内存是系统从堆划分的,所以p指向的是堆内存,而p本身是一个指针变量,普通变量是存储在栈里面的(register限制的变量可能会被分配在寄存器里面).

上面程序有没有错误啊?
有,strcpy(str,"hello world"); 之前,要先对str分配内存。

另:p=(char *)malloc(100);p是指向堆内存,p本身是分配在堆还是栈上?

p是指向堆内存,当然是分配在堆上

错误!运行时显示:
(null)Null pointer assignment.
堆和栈是不同的存储空间

str 只是一个指针,只给它分配了指针大小的空间,用这空间存放地址,这个地址是str所要指向的字符的首地址,
因为现在str 指向的地址不存在 为NULL 所以不可能完成对NULL的字符拷贝,必须出错!~

p 是分配在栈上,p本身的空间又系统自动释放,它指向的空间是分配在堆上的,需要用户自己释放,用 free(p);