原帖在这里:
http://bbs.csdn.net/topics/392139009?page=1#post-402183908
原因是本人手太快了,所以重新发出,给各位好心的前辈分值。
问题列表:
【已了解】那本人该怎么样确定这块地址能否真的被释放了呢?
void * free(void *p):
【尚存疑问】1、这个操作返回空,将返回空的函数作为指针函数有什么意义?
【尚存疑问】2、void *p是什么概念?不是已经void了么?将*p指为void怎么样符合之后写入的参数?……
【尚存疑问】3、void怎么样使用该参数?
关于a地址改变了的问题:
http://bbs.csdn.net/topics/392139009?page=1#post-402183908
原因是本人手太快了,所以重新发出,给各位好心的前辈分值。
问题列表:
【已了解】那本人该怎么样确定这块地址能否真的被释放了呢?
void * free(void *p):
【尚存疑问】1、这个操作返回空,将返回空的函数作为指针函数有什么意义?
【尚存疑问】2、void *p是什么概念?不是已经void了么?将*p指为void怎么样符合之后写入的参数?……
【尚存疑问】3、void怎么样使用该参数?
关于a地址改变了的问题:
a = (char *)malloc(10*sizeof(char)); a = "hello"; b = a;
【尚存疑问】为啥a的地址改了?为什么不是原先malloc申请的地址了?
【尚存疑问】怎么样在malloc申请的那个地址里保存“hello”?
解决方案
15
【尚存疑问】为啥a的地址改了?为什么不是原先malloc申请的地址了?
—
a的地址没改变,而是a的值改变了。
【尚存疑问】怎么样在malloc申请的那个地址里保存“hello”?
---
memcpy
—
a的地址没改变,而是a的值改变了。
【尚存疑问】怎么样在malloc申请的那个地址里保存“hello”?
---
memcpy
15
【尚存疑问】1、这个操作返回空,将返回空的函数作为指针函数有什么意义?
返回空就是不需要返回值。
【尚存疑问】2、void *p是什么概念?不是已经void了么?将*p指为void怎么样符合之后写入的参数?……
用void *作为形参类型是为了通用。任意类型的指针可以隐式的转成void *类型。
【尚存疑问】3、void怎么样使用该参数?
将malloc返回值地址填入即可
返回空就是不需要返回值。
【尚存疑问】2、void *p是什么概念?不是已经void了么?将*p指为void怎么样符合之后写入的参数?……
用void *作为形参类型是为了通用。任意类型的指针可以隐式的转成void *类型。
【尚存疑问】3、void怎么样使用该参数?
将malloc返回值地址填入即可
20
指针变量a里存放的是地址,malloc返回的是在堆上申请的空间的首地址,放在指针变量a里。
a = “hello”;这句是将hello字符串的首地址放在了指针变量里,就是将之前的存放的堆上的地址覆盖了。
可以通过打印这两个地址(%p)来验证;
字符串赋值可以考虑strcpy,strncpy或memcpy;
a = “hello”;这句是将hello字符串的首地址放在了指针变量里,就是将之前的存放的堆上的地址覆盖了。
可以通过打印这两个地址(%p)来验证;
字符串赋值可以考虑strcpy,strncpy或memcpy;
strncpy(a, "hello", strlen("hello")+1);
这句是将字符串“hello”拷贝到堆上申请的空间里。
20
malloc返回的是void *,该类型void *转换成其他基本类型,例如int *, char *等等都是自动转换的。
20
1、free函数的返回值是void,而不是void*
http://en.cppreference.com/w/c/memory/free
2、void*可以表示任意类型的指针,任意类型指针均可隐式转换为void*
3、void参数表示不需要传入参数
http://en.cppreference.com/w/c/memory/free
2、void*可以表示任意类型的指针,任意类型指针均可隐式转换为void*
3、void参数表示不需要传入参数
40
malloc申请到一个地址赋值给a,之后的a = “hello”; 使a指向了常量区的字符串,也就是又改变了a指向的地址
a = “hello”;
改成:
strcpy(a, “hello”);