读书人

malloc 有关问题 求解

发布时间: 2014-04-30 16:34:52 作者: rapoo

malloc 问题 求解
#include <stdio.h>
#include <stdlib.h>

#define LEN 10

char * fun_malloc(void);
void fun_malloc2(char *);

int main(int argc, char **argv)
{
char *q=fun_malloc();
scanf("%s",q);
printf("%s",q);
free(q);

char *str = NULL;
fun_malloc2(str);
scanf("%s", str);
printf("%s\n", str);
free(str);
return 0;
}

char * fun_malloc(void)
{
char *str = NULL;
if((str = (char *)malloc(10)) == NULL)
{
perror("MALLOC ERROR");
exit(0);
}
return str;0
}

void fun_malloc2(char *str)
{
if((str = (char *)malloc(10)) == NULL)
{
perror("MALLOC ERROR");
exit(0);
}
return;
}


以上代码,编译没错,运行出现段错误,,第一段可以输入,输出,第二段不可以输入输出1
[解决办法]
学会提问很重要 请列出不同之处
[解决办法]
这样的题目,不是面试经常考的?
void fun_malloc2(char *str)调用的时候传进的参数是一个temp
temp分配了但是实参还是没有分配...

用void fun_malloc2(char **str)

或者void fun_malloc2(char*& str)
[解决办法]
地址,也只是一个传值的动作而已!


char *str = NULL;
fun_malloc2(&str);
void fun_malloc2( char **str);

[解决办法]
引用:
Quote: 引用:

地址,也只是一个传值的动作而已!

char *str = NULL;
fun_malloc2(&str);
void fun_malloc2( char **str);


谢谢,,,,解决了,,,大神就是大神,,,,
不过我想问一下,能解释一下原因么?
小弟拜上

直接传fun_malloc2(str);//这是地址str的地址也是拷贝地址值操作的
在fun_malloc2函数体中,分配了内存,并把地址赋值给str,但是这个时候操作的只是拷贝的那一份而已!而不是其实际本体!

读书人网 >C语言

热点推荐