首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

malloc 有关问题 求解

2014-04-30 
malloc 问题 求解#include #include #define LEN 10char * fun_malloc(void)voidfun_

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,但是这个时候操作的只是拷贝的那一份而已!而不是其实际本体!

热点排行