求问这个函数的问题在哪
void getMem_err(char *p)
{
char *tmp = NULL;
tmp = (char *)malloc(100);
p = tmp;
}
c语言分配内存的问题
答案:2 悬赏:80 手机版
解决时间 2021-03-15 12:07
- 提问者网友:缘字诀
- 2021-03-15 09:14
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-03-15 10:46
这个函数的功能是申请100个字符空间动态内存,并将首地址通过函数参数返回给调用函数。
一般情况下,这个函数能够正常工作,但当动态内存不那么富裕时,可能出现问题。比如如果系统无法提供足够的动态内存时,函数mallo()会将空指针(NULL)返回给tmp,此时如果调用函数仍按100个字节使用动态内存,就会产生异常,并停止程序运行。推荐的吃醋李方法是,一旦函数malloc()返回空指针,则立即显示错误信息,并退出应用程序。推荐的二格式是:
void *GetMem(datatype type, int size) {
datatype *p = (datatype *)malloc(size);
if(p) retuen p;
return NULL;
}
一般情况下,这个函数能够正常工作,但当动态内存不那么富裕时,可能出现问题。比如如果系统无法提供足够的动态内存时,函数mallo()会将空指针(NULL)返回给tmp,此时如果调用函数仍按100个字节使用动态内存,就会产生异常,并停止程序运行。推荐的吃醋李方法是,一旦函数malloc()返回空指针,则立即显示错误信息,并退出应用程序。推荐的二格式是:
void *GetMem(datatype type, int size) {
datatype *p = (datatype *)malloc(size);
if(p) retuen p;
return NULL;
}
全部回答
- 1楼网友:迟山
- 2021-03-15 11:01
哦,运行时有异常.你的str申请完空间后,下一个赋值语句str="jjjik",使指针指向了字符串"jjjik"的内存,把原先的空间丢失了,内存泄漏;而下一句,strcpy(str+6,"hello world"); 的错误就更多了:首先,str指向的内存空间只有6个字节(还有一个'\0'),str+6内存越界,把"hello world"写到没有申请的内存里;其次,str="jjjik"是一个赋值语句,常量字符串的类型是const char *的,赋值以后str也变成const char *类型,这种类型是常量类型,常量是不容许修改的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯