首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问用于读写操作的指针数组

访问用于读写操作的指针数组
EN

Stack Overflow用户
提问于 2013-09-18 17:44:04
回答 1查看 98关注 0票数 0

正如已经在这个问题C - fwrite binary file bigger than 4GB中发布的,我需要写一个大于4 GB的二进制文件。正如从第一个答案中了解到的,我决定开发多次调用fwrite的代码。

我的采集板有2个bufferLength12 = bufferLenght34 = 524288字节大小的FIFO。每个FIFO存储器都与不同的通道连接,因此当我开始采集时,它们中的数据都来自不同的通道。

我想从这些FIFO中进行多次读取,比如4*nacq。我想为每个获取周期使用不同的指针。

所以我是这样分配内存的:

代码语言:javascript
复制
v12 = (UINT64 *) calloc ( bufferLength12 , 4*nacq);
v34 = (UINT64 *) calloc ( bufferLength34 , 4*nacq);

然后开始采集,对于每个采集周期,我应该传递一个不同的指针,以便将数据存储在RAM中。

我用这种方式在指针上做了一个圆圈:

代码语言:javascript
复制
for ( p=v12,q=v34 ; p<v12+4*nacq && q<v34+4*nacq; p++,q++) {
    ReadF(h, 0, (UINT64 *) p , bufferLength12 , NULL, 0);
    ReadF(h, 1, (UINT64 *) q , bufferLength34 , NULL, 0); }

然后,我尝试将RAM中的数据写入二进制文件:

代码语言:javascript
复制
for ( p=v12,q=v34 ; p<v12+4*nacq && q<v34+4*nacq; p++,q++) {
    fwrite( (UINT64 *) p, 8 , bufferLength12 , fd12);
    fwrite( (UINT64 *) q, 8 , bufferLength34 , fd34);
     }
fclose(fd12);
fd12=NULL;
fclose(fd34);
fd34=NULL;

如果我运行代码,我得到的二进制文件的大小远远大于实际的采集长度。所以我认为指针没有正确初始化。

如果我绘制采集的数据(只是噪声),我可以看到由于使用calloc进行的分配,我可以看到许多0值。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2013-09-18 17:59:44

有许多问题和指标……迷惑。

这一点:

对于FIFO #1,我为4*

UINT64指针分配了空间,每个指针的内存大小都是bufferLength12:

非常难以解释,而且肯定与代码不匹配:

代码语言:javascript
复制
v12 = (UINT64 *) calloc ( bufferLength12 , 4*nacq);
v34 = (UINT64 *) calloc ( bufferLength34 , 4*nacq);

您正在分配两个内存块,一个是bufferLength12 * 4 * nacq字节,另一个是bufferLength34 * 4 * nacq字节。上面的代码中没有任何内容支持您的声明,即您正在为"4*nacq UINT64指针“分配空间,这根本不是真的。

此外,您还应该删除强制转换。

由于您将在这些缓冲区中运行一些数据采集,因此使用calloc()也完全没有意义,因为在将内存返回给您之前,它会花费时间清除内存。

假设您实际上指的是4* nacq * bufferLength12 64位值和4* nacq * bufferLength34 64位值,则分配应为:

代码语言:javascript
复制
UINT64 *v12 = malloc(4 * nacq * bufferLength12 * sizeof *v12);
UINT64 *v34 = malloc(4 * nacq * bufferLength34 * sizeof *v34);

此外,不要关闭循环中的文件,这会使它在下一次写入时立即失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18868882

复制
相关文章

相似问题

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