主题 : 【已解决】C语言-在子函数内分配的内存,母函数内能用吗?
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
楼主  发表于: 2006-11-12 20:00

【已解决】C语言-在子函数内分配的内存,母函数内能用吗?

我在WINDOWS XP 下使用turbo C
代码如下
引用
void subfunc(char **dat)
{
  int i, j;

  dat = (char **)malloc(3 * sizeof(char *));

  for (i = 0; i < 3; ++ i)
  {
    dat = (char *)malloc(16);

    for (j = 0; j < 15; ++ j)
      dat[j] = 'a';

    dat[j] = '\0';
  }
}

int main(void)
{
  char **dat = NULL;
  int i;

  subfunc(dat);

  for (i = 0; i < 3; ++ i)
    puts(dat);

  for (i = 0; i < 3; ++ i)
    free(dat);

  free(dat);

  return 0;
}


输出结果是三行乱码,如果将输出代码加入到子函数里则正常输出

子函数内分配的内存,母函数内能用吗?
如果能的话,我该怎样作才能做到这一点?

ps:为什么会出现斜体?
[ 此贴被拉菲尔在2006-11-15 10:38重新编辑 ]
级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
沙发  发表于: 2006-11-13 09:55

不可以。

使用全局变量
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
板凳  发表于: 2006-11-13 13:48

你没有定义全局变量啊?反正我没有看见。晕!

我不是很喜欢同时用2个*。所以我也不是很明白你的程序。
我随便写了个超级简单的。(VS2005编译)
1和2从本质上是完全一样的。不过我一般只用指针,不用指针的指针。晕!!!

1,
#include "stdafx.h"
#include "stdlib.h"

int itsI=10; //全局变量
char *itsPoint=(char *)malloc((itsI+1));   //全局变量

int main()
{

  int i;
  for(i=0;i<itsI;i++)
  {
    *(itsPoint+i)='a';
  }
  *(itsPoint+i)='\0';
  printf("%s\n",itsPoint);
  free(itsPoint);
  return 0;
}


2,
#include "stdafx.h"
#include "stdlib.h"

int itsI=10; //全局变量
char *itsPoint=(char *)malloc((itsI+1));   //全局变量

void func(char *itsPchr,int itsI);

int main()
{

  int i;
  func(itsPoint,itsI);
  printf("%s\n",itsPoint);
  free(itsPoint);
  return 0;
}

void func(char *itsPchr,int itsI)
{
  int i;
  for(i=0;i<itsI;i++)
  {
    *(itsPchr+i)='a';
  }
  *(itsPchr+i)='\0';
}
[ 此贴被dolphin在2006-11-13 14:10重新编辑 ]
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
地板  发表于: 2006-11-14 11:41

我不喜欢用指针的指针,因为我目前还没有发现那样有什么实际意义,我写程序,尽量简单,尽量易懂。
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
草席  发表于: 2006-11-14 15:02

需要用到再说。
反正目前不需要。
目前不怎么接触低层。。。。。
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。