当前位置:  技术问答>linux和unix

实在困惑:自己写的库函数中的参数传递问题(结构体参数,能进不能出)(高分是应为题目难)

    来源: 互联网  发布时间:2016-01-01

    本文导语:  遇到一个困惑: 1、写的demo中能实现预期功能 2、实际使用中传递参数失败 实际应用: 在nm.cpp中实现一个函数nm(struct *),参数为结构体指针,编译成.o文件 在main函数中调用该函数,结构体中的成员值可以传入nm 但是...

遇到一个困惑:
1、写的demo中能实现预期功能
2、实际使用中传递参数失败
实际应用:
在nm.cpp中实现一个函数nm(struct *),参数为结构体指针,编译成.o文件
在main函数中调用该函数,结构体中的成员值可以传入nm
但是却传不出来。

这是什么原因造成的啊 ?

我自己写一个类似的demo是可以实现 参数传入传出的,完全达到了目的:构造函数库
相关程序如下:

文件nmMachine.cpp--->nmMachine.o

int nmGetMachineConfig(AGENT_INFO *prAgentInfo)
{
    printf("[nmGetMachineConfig]...start.n");
    printf("[nmGetMachineConfig]sAgentId=%sn",prAgentInfo->sAgentId);
    prAgentInfo->nDisk=234;
    prAgentInfo->nMemory=234;
    strcpy(prAgentInfo->sIpAddr,"121.122.00");
    printf("[nmGetMachineConfig]...df /home :sAgentId=%s,IPADDR=%s,DISK=%ld,Memory=%ld.n",prAgentInfo->sAgentId,prAgentInfo->sIpAddr,prAgentInfo->nDisk,prAgentInfo->nMemory);
    return 0;
}


文件agent.cpp-->agent

AGENT_INFO g_rAgentInfo; 
strcpy(g_rAgentInfo.sAgentId,"ddd");
nmGetMachineConfig(&g_rAgentInfo);
   printf("[Debug] :sAgentId=%s,IP_Addr=%s,DiskTotal=%ld M,MemoryTotal=%ld M",g_rAgentInfo.sAgentId,g_rAgentInfo.sIpAddr,g_rAgentInfo.nDisk,g_rAgentInfo.nMemory);
      
    
    
    
编译makefile    
      
CCFLAGS = -W -Wall -Wpointer-arith -Wno-deprecated -pipe -Wno-uninitialized 
        -fno-implicit-templates 
        -DACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION -D_POSIX_THREADS 
        -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT -DACE_HAS_AIO_CALLS 
        -DACE_HAS_EXCEPTIONS -D_OS_LINUX -D_TCPLIB_NO_HEAD
CCFLAGS +=-I$(ACE_ROOT) -I$(ACE_ROOT)/ace -I$(XERCESCROOT)/include  -I$(HOME)/app/commlib -I$(INDIR) -I.
LDFLAGS = -L/usr/lib -L$(ACE_ROOT)/ace -lACE -ldl -lpthread -lrt -L$(OBJDIR)


agent:$(OBJDIR)/agent.o  $(OBJDIR)/nmMachine.o
    $(CC) $(CCFLAGS) $(LDFLAGS) $(OBJDIR)/agent.o  $(OBJDIR)/nmMachine.o -o agent

$(OBJDIR)/agent.o:agent.cpp
    $(CC) $(CCFLAGS) -g -c agent.cpp -o $(OBJDIR)/agent.o
    
    
执行结果:

[nmGetMachineConfig]...start.
[nmGetMachineConfig]sAgentId=ddd
[nmGetMachineConfig]...df /home :sAgentId=ddd,IPADDR=121.122.00,DISK=234,Memory=234
[Debug] :sAgentId=ddd,IP_Addr=,DiskTotal=1075485755 M,MemoryTotal=-1073765064 M


做测试写的相应demo如下:
agent.cpp-->agent

#include 
#include 

INFO g_rInfo;

int main()
{
   g_rInfo.a=2;
   nm(&g_rInfo);
   printf("a=%d,b=%dn",g_rInfo.a,g_rInfo.b);
   return 0;
}


nm.h

#include 

typedef struct info
{
    int a;
    int b;
}INFO;

int nm(INFO *rAgent);

nm.cpp-->nm.o


#include 

int nm(INFO *rAgent)
{
    rAgent->b=3;
    printf("a=%d,b=%dn",rAgent->a,rAgent->b);

    return 0;

}

执行结果

a=2,b=3
a=2,b=3



困惑啊。。

1、有人说是内存泄露,但是编译、执行过程没有问题,我把nm中的数据处理过程,改为直接赋值,但是数据仍然没有传出来。
2、有人说是编译优化出了问题,我是不懂怎么弄
3、我把nm函数放入agent.h中能够实现预期目标,数据能够传入,也能传出。
但是多个文件调用nm函数,而且文件间也有相互调用,所以很难难取舍。


期盼达人指点一二。


|
写你的哪个什么demo就够了,前面的都是没用的信息,浪费时间

我弄不清你还想要什么,在main函数里面你并没有写b的值,nm结束之后b的值明显是nm中修改的3了,你还要什么“传出”?

实在弄不清你的问题!

|
问问题也是要学问的。
你叽里咕噜了半天。。。。,你提炼个重点来问!

|
应该是字节对齐不同造成的。
就是说,你在编译nmMachine.cpp和agent.cpp时所用的编译参数不一样,
造成两段代码对同一个AGENT_INFO的理解不一样。

|
mark
下班慢慢看

|
揭贴.记得给分.教训啊

    
 
 

您可能感兴趣的文章:

  • GDB调试能进入inline函数吗?
  • Python函数默认参数和字典参数及可变参数(带星号参数)
  • java类中的方法就是函数了,函数参数全是传值了,传址参数怎样表示?
  • 一个父类的构造函数的参数是(Applet applet),请问它的子类构造函数当中应怎样调用父类构造函数?
  • unix shell 下进程的命令行参数与源程序 main函数的入口参数 是同一回事吗? 第一次编 .sh 文件,哪一位肯帮忙?
  • 很菜,shell脚本中怎么写函数,怎么使用带参数的函数???
  • 如何将comm 2>>的重定向结果传输到一个函数呢,作为这个函数的参数输入
  • 各位高手:java是不是不支持缺省参数。为什么我在写一个类的构造函数时,加入缺省参数出现错误。
  • JAVA中函数调用时,能不能向 C/C++一样函数的入口参数可以为传出值(就是引用,或指针)
  • 急:unix的shell脚本中,定义了一个函数getDate(),在后面的执行命令参数用要使用这个函数的返回值,应该怎么写?
  • java中函数的缺省参数怎么定义?
  • probe函数参数传递过程?
  • 网络技术 iis7站长之家
  • 求助:ioctl函数的命令参数
  • Linux0.11 内核源码 main函数的参数问题
  • gtk 回调函数的参数传递问题!
  • 函数参数入栈顺序以及参数地址间隔的问题
  • ioctl函数的参数问题
  • write(1,buff,len);这个函数中的第一个参数是常数1??
  • 关于main()函数参数调用的问题,老师请进~谢谢
  • c++函数参数的含义
  • main函数中的参数args[]???
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • 如果知道一个函数的地址或函数名,如何得到函数所在的文件名?
  • C++ MultiMaps 成员 key_comp():返回比较key的函数
  • java的数学函数在那个类中,如幂函数、指数、对数、双曲线函数等?
  • C++ MultiMaps 成员 value_comp():返回比较元素value的函数
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • Linux c++虚函数(virtual function)简单用法示例代码
  • js的众多函数令小弟实在搞不清楚!哪有函数速查手册之类的软件或者书籍!谢了!比如,setInterval、clearInterval这两个函数是干什么的?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
  • cityhash 32位,64位和128位介绍及函数列表
  • 谁能告诉我,在JAVA中,哪个函数和ASP中的Int()函数等同,也就是取整函数


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3