顺序表编译出现的警告......

leeraycs 2008-04-20 02:41:06
int *seqlist_find(seqlist *s,Elemtype x)
{
int i=0,j,a[10]={0};

for(j=0;j<s->numinlist;j++)
{
if(x==s->listarray[j])a[i++]=j+1;
}
return a;
}


编译时最后一句出现 warning:returning address of local variable or temporary

怎么修改?
...全文
45 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leeraycs 的回复:]
C/C++ code
#include "stdio.h"
int a(int x,int y)
{ int z;
z=x+y;
return z;
}
main()
{
int b;
b=a(2,3);
}



这段代码编译的时候怎么没有警告啊? 函数a不也是返回了一个局部变量嘛?
[/Quote]


返回的z会拷贝到b


但是如果是数组,你只是拷贝了返回的数组首地址,而里面的内容是没拷贝出来的,是属于函数的局部数据
星羽 2008-04-21
  • 打赏
  • 举报
回复

int *seqlist_find(seqlist *s,Elemtype x)
{
int i=0,j,a[10]={0};

for(j=0;j<s->numinlist;j++)
{
if(x==s->listarray[j])a[i++]=j+1;
}
return a;
}

你返回了局部数组了



int *seqlist_find(seqlist *s,Elemtype x)
{
int i=0,j;
static a[10];
memset(a, 0, sizeof(a));

for(j=0;j<s->numinlist;j++)
{
if(x==s->listarray[j])a[i++]=j+1;
}
return a;
}


leeraycs 2008-04-21
  • 打赏
  • 举报
回复
怎么?没人知道啊!
Yun0825 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 public_friend 的回复:]
你的数组a在函数返回后就不存在了,所以应该用malloc()分配动态数组,或在声明数组a是把它声明成static,或把数组a声明为全局变量。
[/Quote]
leeraycs 2008-04-20
  • 打赏
  • 举报
回复
up
leeraycs 2008-04-20
  • 打赏
  • 举报
回复

#include "stdio.h"
int a(int x,int y)
{ int z;
z=x+y;
return z;
}
main()
{
int b;
b=a(2,3);
}


这段代码编译的时候怎么没有警告啊? 函数a不也是返回了一个局部变量嘛?
leeraycs 2008-04-20
  • 打赏
  • 举报
回复
哦,我明白了. 顺便问一下 返回一个局部变量有什么弊端?请举个例子.
lala_benben 2008-04-20
  • 打赏
  • 举报
回复
...返回了一个局部变量。。
JavaerRobertLi 2008-04-20
  • 打赏
  • 举报
回复
你的数组a在函数返回后就不存在了,所以应该用malloc()分配动态数组,或在声明数组a是把它声明成static,或把数组a声明为全局变量。

69,374

社区成员

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

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