这里我带来了我的新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);
请帮我解决这个问题?
提前致谢
答案 0 :(得分: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);
答案 1 :(得分:1)
char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];
只是指向尺寸为BUFFER_SIZE和PACKET_SIZE的2D数组的单个指针。
如果您想要连续的内存,可以将其更改为2D数组
char rxbuf[BUFFER_SIZE][PACKET_SIZE];
或指向数组的指针
char (*rxbuff)[BUFFER_SIZE] ;
rxbuff = malloc( sizeof( char ) * BUFFER_SIZE * PACKET_SIZE ) ;
以这两种方式访问数组的方式与rxbuff[0][0] = 'a' ;
答案 2 :(得分: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);