我有一个结构类型,MESGB与细节:用malloc初始化Byte数组有问题吗?
typedef unsigned char Byte;
typedef struct MESGB
{
unsigned int soh;
unsigned int stx;
unsigned int etx;
Byte checksum;
Byte msgno;
Byte *data;
} MESGB;
和我有一个名为frameBuf变量,它是MESGB的数组:
#define buffSize 6
#define maxElmt 3
static MESGB frameBuf[buffSize]
当我想与此函数来初始化frameBuf
:
int k;
for(k = 0; k<=buffSize-1; k++)
{
frameBuf[k].soh = SOH;
frameBuf[k].stx = STX;
frameBuf[k].etx = ETX;
frameBuf[k].checksum = 0;
frameBuf[k].msgno = -1;
frameBuf[k].data = (Byte*) malloc (maxElmt*sizeof(Byte));
}
我发现奇怪的是,如果我的值写入这样frameBuf数据:
frameBuf[0].data[0] = 'a'
frameBuf[0].data[1] = 'b'
frameBuf[0].data[2] = 'c'
frameBuf[1].data[0] = 'd'
frameBuf[1].data[1] = 'e'
frameBuf[1].data[2] = 'f'
frameBuf[2].data[0] = 'g'
frameBuf[2].data[1] = 'h'
frameBuf[2].data[2] = 'i'
,当我尝试打印所有frameBuf数据,我得到的输出是这样的:
frameBuf[0].data[0] = 'g'
frameBuf[0].data[1] = 'b'
frameBuf[0].data[2] = 'c'
frameBuf[1].data[0] = 'g'
frameBuf[1].data[1] = 'e'
frameBuf[1].data[2] = 'f'
frameBuf[2].data[0] = 'g'
frameBuf[2].data[1] = 'h'
frameBuf[2].data[2] = 'i'
,我来到了结论,如果我改变frameBuf的值[I]。数据[0] ,所有其他frameBuf [j] .data [0]也会改变,这让我感到不安。即使如果我改变数据[k]中的数据,其中k是0的其他整数,它不会改变其他frameBuf中的任何其他数据[k]
有人可以向我解释如何解决这个问题吗? 在此先感谢! :d
将帖子: 可以看到的代码:http://ideone.com/6BRsU
我在transMessage, 初始化frameBuf在initFrameBuf, 分配数据到frameBuf和奇怪输出处于retryTransWindow
将帖子: 解决。好的,问题不在于数组初始化。这一切都是我在编码方面的笨拙。 感谢您的帮助! ^^
您需要展示如何分配'.data'字段。 – Cheeso