配列の構造体についての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
のぶ

配列の構造体についての質問

#1

投稿記事 by のぶ » 18年前

質問です。
構造体の中に配列を宣言してプログラムを行っているのですが、
コンパイルは通ってもリンクが通らないという事態に陥ってしまいました。
リンクエラーメッセージは Symbol "_LED_YKK_AIRSHIP_P1_n" size mismatch.
です。
プログラムは以下のとおりです。

struct LED_normal{
const short frame;
const unsigned char speed;
unsigned char dat[/url][40];
};

struct LED_normal LED_YKK_AIRSHIP_P1_n = {
70,
2,
{
{255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1
{242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2
{229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3
   ・
   ・
   ・
};

どなたかいい方法をお教えくださいませんか。

keichan

Re:配列の構造体についての質問

#2

投稿記事 by keichan » 18年前

構造体メンバに不確定のサイズを指定することはできません。
(コンパイル時にサイズが確定できない為)
struct LED_normal{
	const short frame;
	const unsigned char speed;
	unsigned int dat_size;
	unsigned char** dat; 
};

として動的に値を入れていくしかありません。

int main()
{
	const int n = 10;	// データサイズ
	const unsigned char data[n][40] = {
		{255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1 
		{242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2 
		{229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3 
			・ 
			・ 
			・ 
	};
	struct LED_normal LED_YKK_AIRSHIP_P1_n = {
		70,
		2,
		n,
		NULL,
	};
	LED_YKK_AIRSHIP_P1_n.dat = (unsigned char**)malloc(sizeof(unsigned char*) * LED_YKK_AIRSHIP_P1_n.data_size);
	for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) {
		LED_YKK_AIRSHIP_P1_n.dat = (unsigned char*)malloc(sizeof(unsigned char)*40);
		memcpy(LED_YKK_AIRSHIP_P1_n.dat, data, sizeof(unsigned char)*40);
	}


	// 終了処理
	for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) {
		free(LED_YKK_AIRSHIP_P1_n.dat);
	}
	free(LED_YKK_AIRSHIP_P1_n.dat);
	return 0;
}



提示されたデータ構造にしなければいけない背景を提示頂ければ違うアプローチでもっと簡単に記述できる
アドバイスができるかもしれません。

閉鎖

“C言語何でも質問掲示板” へ戻る