C运行出错

来源:百度知道 编辑:UC知道 时间:2024/06/22 05:12:29
#include<stdio.h>
#include<iostream>
void fun(char * p)
{
p=(char *)malloc(50);
}
void main()
{
char *pt;
fun(pt);
strcpy(pt,"hello world");
puts(pt);
}
总是在fun(pt)那一步出错
说下为什么出错呢 ..郁闷了
该怎么写呢?
在fun()函数中怎么不能给p赋值呢?比如 p="dqoigjaksfdjg";我试了下 一赋值就运行错误...赋值后free()也不行

形参的p和你传进去的不一样,相当于传值。
也就是说函数又在内存中创建了一个 p
这个P是在栈内存中的,函数执行完毕就没有了
你在函数中p=(char *)malloc(50);实际是为你的形参分配了空间。
主函数中的pt没有空间,自然strcpy(pt,"hello world"); 就会“蹦”了
你可以定义pt的时候char *pt = NULL;然后调用你的那个函数以后,你会看到在主函数用pt一直为空,说名了传的是值
这个程序会导致内存泄漏 ]

修改如下
#include<stdio.h>
#include<iostream>
void fun(char ** p)
{
*p=(char *)malloc(50);
}
void main()
{
char *pt;
fun(&pt);
strcpy(pt,"hello world");
puts(pt);
free(pt);
}
传地址就可以了
也可以
#include<stdio.h>
#include<iostream>
char* fun()
{
p=(char *)malloc(50);
return p;
}
void main()
{
char *pt;
pt = fun();
strcpy(pt,"hello world");
puts(pt);
free(pt);
}
把指针返回

你的问题,主要在于,fun函数对p的修改根本传递不出来
也就是说main函数的pt,根本不能得到fun函数申请的内存。

应该这么写:
#include<stdio.h>