当前位置: 技术问答>linux和unix
请教内存分配
来源: 互联网 发布时间:2015-03-09
本文导语: char * test() { char *ptr = (char *)malloc(100); memcpy(ptr, "1234567890", 10); ptr[10] = 0x00; return ptr; } int main() { char *p = test(); 我以后用指针P会不会出什么问题? } | FT,你...
char * test() {
char *ptr = (char *)malloc(100);
memcpy(ptr, "1234567890", 10);
ptr[10] = 0x00;
return ptr;
}
int main() {
char *p = test();
我以后用指针P会不会出什么问题?
}
char *ptr = (char *)malloc(100);
memcpy(ptr, "1234567890", 10);
ptr[10] = 0x00;
return ptr;
}
int main() {
char *p = test();
我以后用指针P会不会出什么问题?
}
|
FT,你的内存分配是通过malloc分配的,是在堆里分配的,所以当子程序退出的时候,是不会消失的,除非你用free函数.
但是如果你写成char ptr[]="1234567890";的话,那样ptr的空间是在栈里,当子程序推出的时候,是需要释放栈空间的,所以你返回ptr,就成了悬空的了.
明白了么?栈和堆不是一个概念
但是如果你写成char ptr[]="1234567890";的话,那样ptr的空间是在栈里,当子程序推出的时候,是需要释放栈空间的,所以你返回ptr,就成了悬空的了.
明白了么?栈和堆不是一个概念
|
没有问题,注意char *ptr = (char *)malloc(100);不能用
char ptr[]="1234567890";代替,因为会造成悬空指针.
char ptr[]="1234567890";代替,因为会造成悬空指针.
|
你指的又是什么“问题”呢?
使用指针无非是注意越界访问和安全释放
使用指针无非是注意越界访问和安全释放
|
没问题
|
你概念没有搞清楚.