У меня есть тип структуры, MESGB с деталями:
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] .data [0], все другие frameBuf [j] .data [0] также изменятся, что я нахожу тревожным. Даже если я изменю данные в data [k], где k - другое целое число в 0, это не изменит никаких других данных [k] в другом frameBuf []
Может кто-нибудь объяснить мне, как решить эту проблему?
Заранее спасибо! : D
[Изменено]:
Вы можете увидеть код в: http://ideone.com/6BRsU
Я инициализирую frameBuf в initFrameBuf,
назначить данные для frameBuf в transMessage,
и странный вывод в retryTransWindow
[Изменено]:
Решаемые. Хорошо, проблема не в инициализации массива.
Все это моя неуклюжесть в кодировании.
Спасибо за вашу помощь! ^^