malloc 有关问题 求解
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)
------解决方案--------------------
地址,也只是一个传值的动作而已!
------解决方案--------------------
直接传fun_malloc2(str);//这是地址str的地址也是拷贝地址值操作的
在fun_malloc2函数体中,分配了内存,并把地址赋值给str,但是这个时候操作的只是拷贝的那一份而已!而不是其实际本体!
#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);
------解决方案--------------------
直接传fun_malloc2(str);//这是地址str的地址也是拷贝地址值操作的
在fun_malloc2函数体中,分配了内存,并把地址赋值给str,但是这个时候操作的只是拷贝的那一份而已!而不是其实际本体!