首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用指向全局数据的本地指针的memcpy

使用指向全局数据的本地指针的memcpy
EN

Stack Overflow用户
提问于 2012-10-05 08:16:51
回答 2查看 1.1K关注 0票数 0

我有一个叫做xbar的全局结构。我调用了其中的3个,然后将一个局部指针传递给一个函数,在这个函数中,它被分配给全局函数中的一个短数组。但是当我尝试使用memcpy复制指向的数据时,我得到了一个“异常”错误。

代码语言:javascript
复制
typedef struct s_xbar
{
    short close[390][9000];
} xbar;
xbar *Xbar;

void assignPtr(short *qdata)
{
    qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(qdata);

    short dataBarToFill[500];
    memcpy(dataBarToFill, qdata, 90 *  sizeof(short));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 08:20:25

这是因为在assignPtr()中,您只将Xbar[0].close[0]赋值给指针qdata的本地副本。assignPtr()返回后,mycode()中的qdata仍然为空。您应该像下面这样传递指针到指针:

代码语言:javascript
复制
void assignPtr(short **qdata)
{
    *qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(&qdata);

    short dataBarToFill[500];
    memcpy(dataBarToFill, qdata, 90 *  sizeof(short));
}
票数 3
EN

Stack Overflow用户

发布于 2012-10-05 08:19:59

C是一种按值传递的语言,因此您应该传递qdata的地址

代码语言:javascript
复制
void assignPtr(short **qdata)
{
    *qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(&qdata);
    // ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12737810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档