2

在这里,我提出了我的新 C 问题,我有一个 char 数组数组,我想在内存中连续保留内存,以帮助通过一次调用写入文件。

好的,这就是我所拥有的:

#define PACKET_SIZE 40960
#define BUFFER_SIZE 3950
#define N_BUFFERS 4

typedef struct buffer{
  int lock;
  char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];
}buffer;

/* Buffer list */
buffer bufferlist[N_BUFFER];

[...]

/* I use this to init structs */
void initializeData() {
  for (int i = 0; i < N_BUFFER; i++) {
    bufferlist[i].lock = 0;
    bufferlist[i].rxbuf = malloc(sizeof(???)); /* ??? <- I don't know what to put here */
  }
}

/* After I insert data */
for (int ibuffer = 0; ibuffer < N_BUFFER; ibuffer++) {
  for (int idata = 0; idata < BUFFER_SIZE; idata++) {
    /* Here I want to pass char array[PACKET_SIZE] */
    int bytes_received = insertData(bufferlist[ibuffer].rxbuf[idata], sizeof(bufferlist[ibuffer].rxbuf[idata]));
    [...]
  }
}

[...]

/* Then write with this */
fwrite(bufferlist[i].rxbuf, sizeof(????), 1, outfile);

请问你能帮我这个代码吗?

提前致谢

4

3 回答 3

1

利用

bufferlist[i].rxbuf = malloc(sizeof(*bufferlist[i].rxbuf)); 

这意味着:根据变量指向的需要分配bufferlist[i].rxbuf尽可能多的内存。bufferlist[i].rxbuf

在此之后,调用fwrite()将是:

fwrite(bufferlist[i].rxbuf, sizeof(*bufferlist[i].rxbuf), 1, outfile);
于 2013-12-19T14:32:46.590 回答
1

更改结构中 char 数组的定义

char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];

char rxbuf[BUFFER_SIZE][PACKET_SIZE];

有了这个,你已经创建了 char 数组并保留了内存,所以不需要malloc().

你可以这样fwrite()

fwrite(bufferlist[i].rxbuf, sizeof(bufferlist[i].rxbuf), 1, outfile);
于 2013-12-19T12:29:52.493 回答
1

char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];只是一个指向大小为 BUFFER_SIZE 和 PACKET_SIZE 的二维数组的单个指针。

如果您想要连续的内存,您可以将其更改为 2D 数组

char rxbuf[BUFFER_SIZE][PACKET_SIZE];

或指向数组的指针

char (*rxbuff)[BUFFER_SIZE] ;
rxbuff = malloc( sizeof( char ) * BUFFER_SIZE * PACKET_SIZE ) ;

在这两种方式中,都以相同的方式访问数组rxbuff[0][0] = 'a' ;

于 2013-12-19T12:39:11.347 回答