关于函数内部对指针的操作

lanmansize 2008-08-19 11:15:26
实现函数外部申请内存,函数内部操作,函数外部释放:代码如下,运行后出现core文件,请大家帮忙
void test(struct ss_prod_info **prod_info)
{

strcpy(prod_info[0]->psattrib[0],"wohaoma");
strcpy(prod_info[1]->psattrib[0],"wohaoma12");
return;
}

void main(int argc,char *argv[])
{
func_createlog("开始执行程序",CM_GETINFO_LOG,1);
while(1)
{
int n=0,m=0;
struct ss_prod_info *prod_info[50];
for(n=0;n++;n<10)
{
m=0;
prod_info[n]=(struct ss_prod_info *)malloc(100);
for(m=0;m++;m<10)
prod_info[n]->psattrib[m]=(char *)malloc(100);
}
test(prod_info);
printf("prod_info[0]->psattrib[0]=[%s] \n",prod_info[0]->psattrib[0]);
printf("prod_info[1]->psattrib[0]=[%s] \n",prod_info[1]->psattrib[0]);
EXEC SQL commit release;
for(n=0;n++;n<10)
{
m=0;
for(m=0;m++;m<10)
free(prod_info[n]->psattrib[m]);
free(prod_info[n]);
}
}
return;
}
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanmansize 2008-08-19
  • 打赏
  • 举报
回复
晕~,我说看着for别扭呢,稍作修改可以了,内存释放并无问题。附代码如下
void test(struct ss_prod_info **prod_info)
{
printf("\n 3");
strcpy(prod_info[0]->psattrib[0],"wohaoma");
printf("\n 4");
strcpy(prod_info[1]->psattrib[0],"wohaoma12");
return;
}

void main(int argc,char *argv[])
{
func_createlog("开始执行程序",CM_GETINFO_LOG,1);
printf("\n 1");
while(1)
{
int n=0,m=0;
n=0;
struct ss_prod_info *prod_info[50];
for(n=0;n<10;n++)
{
m=0;
prod_info[n]=(struct ss_prod_info *)malloc(100);
for(m=0;m<10;m++)
prod_info[n]->psattrib[m]=(char *)malloc(100);
}
printf("\n 2");
test(prod_info);
printf("prod_info[0]->psattrib[0]=[%s] \n",prod_info[0]->psattrib[0]);
printf("prod_info[1]->psattrib[0]=[%s] \n",prod_info[1]->psattrib[0]);
n=0;
for(n=0;n<10;n++)
{
m=0;
for(m=0;m<10;m++)
free(prod_info[n]->psattrib[m]);
free(prod_info[n]);
}
}
return;
}

不过小弟还有个问题,能否更改上述代码,方式变为函数内部申请内存,函数外部释放呢
lanmansize 2008-08-19
  • 打赏
  • 举报
回复
晕~,我说看着for别扭呢,稍作修改可以了,内存释放并无问题。附代码如下
void test(struct ss_prod_info **prod_info)
{
printf("\n 3");
strcpy(prod_info[0]->psattrib[0],"wohaoma");
printf("\n 4");
strcpy(prod_info[1]->psattrib[0],"wohaoma12");
return;
}

void main(int argc,char *argv[])
{
func_createlog("开始执行程序",CM_GETINFO_LOG,1);
printf("\n 1");
while(1)
{
int n=0,m=0;
n=0;
struct ss_prod_info *prod_info[50];
for(n=0;n<10;n++)
{
m=0;
prod_info[n]=(struct ss_prod_info *)malloc(100);
for(m=0;m<10;m++)
prod_info[n]->psattrib[m]=(char *)malloc(100);
}
printf("\n 2");
test(prod_info);
printf("prod_info[0]->psattrib[0]=[%s] \n",prod_info[0]->psattrib[0]);
printf("prod_info[1]->psattrib[0]=[%s] \n",prod_info[1]->psattrib[0]);
n=0;
for(n=0;n<10;n++)
{
m=0;
for(m=0;m<10;m++)
free(prod_info[n]->psattrib[m]);
free(prod_info[n]);
}
}
return;
}

不过小弟还有个问题,能否更改上述代码,方式变为函数内部申请内存,函数外部释放呢
lanmansize 2008-08-19
  • 打赏
  • 举报
回复
补充下,结构体成员psattrib 声明的为一个指针数组。
太乙 2008-08-19
  • 打赏
  • 举报
回复
两处for都写反了吧?
for(n=0;n<10;n++)
{}
for(m=0;m<10;m++)
{}
太乙 2008-08-19
  • 打赏
  • 举报
回复


void main(int argc,char *argv[])
{
func_createlog("开始执行程序",CM_GETINFO_LOG,1);
while(1)
{
int n=0,m=0;
struct ss_prod_info *prod_info[50];
for(n=0;n++;n <10) //for这里还能这么用?
{
m=0;
prod_info[n]=(struct ss_prod_info *)malloc(100);
for(m=0;m++;m <10)
prod_info[n]->psattrib[m]=(char *)malloc(100);
}
test(prod_info);
printf("prod_info[0]->psattrib[0]=[%s] \n",prod_info[0]->psattrib[0]);
printf("prod_info[1]->psattrib[0]=[%s] \n",prod_info[1]->psattrib[0]);
EXEC SQL commit release;
for(n=0;n++;n <10)
{
m=0;
for(m=0;m++;m <10)
free(prod_info[n]->psattrib[m]);
free(prod_info[n]);
}
}
return;
}

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧