主题 : 【已解决】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: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
沙发  发表于: 2006-11-13 12:29

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

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';
  }
}

/*char **dat = NULL;*/

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

/*   subfunc(dat);*/
    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';
  }

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

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

  free(dat);

  getch();

  return 0;
}

遗憾,定义全局变量也不行
将子函数代码放到母函数里才可以,
海豚朋友有其他方法吗?
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
板凳  发表于: 2006-11-14 11:21

是的已改用这种方法

海豚朋友说的全局变量法不能解决以下:指向指针的指针在子函数内二次分配内存(向指针数组分配内存),母函数无法正常访问

ps:
定义char *dat和struct t_dat {char *dat};
这二者在内存使用上有什么区别?
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
地板  发表于: 2006-11-14 15:01

引用
引用第6楼dolphin2006-11-14 11:41发表的“”:
我不喜欢用指针的指针,因为我目前还没有发现那样有什么实际意义,我写程序,尽量简单,尽量易懂。

同意,我也是喜欢傻瓜程序

但是有些底层代码就是使用非常复杂的编程技巧,

为了编写自己的接口只能学习了--

至少在新的解决方法出现以前……