查看完整版本: [-- 【已解决】C语言-在子函数内分配的内存,母函数内能用吗? --]

【 浮游城 - Castle in the Sky | 开放邀请注册,PS|SS|WII|DC下载研究中心 】 -> 【 电脑全方位 | Computer All Round 】 -> 【已解决】C语言-在子函数内分配的内存,母函数内能用吗? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

拉菲尔 2006-11-12 20:00

我在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:为什么会出现斜体?

dolphin 2006-11-13 09:55
不可以。

使用全局变量

拉菲尔 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;
}

遗憾,定义全局变量也不行
将子函数代码放到母函数里才可以,
海豚朋友有其他方法吗?

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

Taburiss 2006-11-13 22:09
论坛的那个…………防转载的东西……实在是比较讨厌…………
看着乱七八糟……当然,也可能是我用Opera的关系……字比较大……

其实呢,你可以在主函数里面分配内存,然后把这个地址传到子函数里面操作~~这样子,主函数就可以打咯~~~

拉菲尔 2006-11-14 11:21
是的已改用这种方法

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

ps:
定义char *dat和struct t_dat {char *dat};
这二者在内存使用上有什么区别?

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

华恶崇 2006-11-14 13:58
但是别人的程序有这些东西你不会就看不明白啦。
而且你是会有需要用到的一天的。

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

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

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

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

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

dolphin 2006-11-14 15:02
需要用到再说。
反正目前不需要。
目前不怎么接触低层。。。。。


查看完整版本: [-- 【已解决】C语言-在子函数内分配的内存,母函数内能用吗? --] [-- top --]


Powered by PHPWind Code © 2003-08 PHPWind
Gzip enabled

You can contact us