[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:52 / Filesize : 232 KB / Number-of Response : 957
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 18



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

321 名前:デフォルトの名無しさん [2007/08/23(木) 16:05:44 ]
おじゃまします。質問です。

typedef struct{
char a[2];
char b[3];
char c[4];
}AA;

typedef struct{
char e[16];
}BB;

AA aa;
BB bb;

…こんなんで、aaに代入された値をbbに一発で書き込んで、
しかもスペースで埋めてくれる関数とかありませんか?

VBからCに書き直してたら、LSetで一発だったので。。


322 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:13:02 ]
関数使わんでもできるけど、一発(スペース埋めるなら2発か)でやるなら
memcpy() と memset() でどうか

323 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 16:18:12 ]
>319 ありがとうございました。cd 大野といわれても漢字をコマンド
プロンプトに打ち込めないみじめさ。嬉しさも中ぐらいなり、秋の風。

324 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:21:37 ]
どうしても無理ならマウス使ってコピペ
右クリックかシステムメニューでできる

325 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:31:15 ]
Alt+半角/全角 で入力できるぜ

326 名前:321 [2007/08/23(木) 16:35:43 ]
>322
できました。ありがとうございます!

327 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:49:57 ]
>>322,326
構造体のパディングは大丈夫なのか?
文字列の連結ではないのか?
いやできたならいいんだけど。

328 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:09:58 ]
同じ型が続いてるなら多分パディングはないんじゃないかなあ。

329 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:13:26 ]
パディングはcharが並んでるだけだったからあえて書かなかったが
LSetの仕様を考慮しないとね。どっちにしても一発は厳しい



330 名前:デフォルトの名無しさん [2007/08/23(木) 19:09:03 ]
char *func_b( char *str, char ch )
{
char *p;
for( p = str; *p != '\0'; p++ )
if( *p == ch ) return p;
return 0;
}

これと同等の処理を行う標準ライブラリ関数を教えてください お願いします

331 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 19:18:28 ]
strchr?

332 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 19:18:52 ]
strchrかな

333 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 20:06:37 ]
Borland

334 名前:デフォルトの名無しさん [2007/08/23(木) 20:23:42 ]
>>331-333
ありがとうございます
strcharだと
char *func_b( char *str, char ch )
じゃなくて
char *func_b( char *str, int c)
になるんじゃないかと迷ってました

335 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 20:26:41 ]
プログラム実行できました。今日中にできるとは思いませんでした。
Borland C++ Compiler のつぎはTurbo Debuggerです。
ありがとう!ありがとう! >293,294,295,314,318,
325さんAlt + 半角/全角や漢字のコピペが可能だとは驚きでした。

まだいろいろ教えていただくこともあろうと思います。




336 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:26:46 ]
>>321

memset(&bb, ' ', sizeof(bb));
bb = aa;

これでいいような気がするんだが、
構造体の要素って順番に並んでるとは規定されてないけどね。

337 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:29:48 ]
>>334
char *strchr (const char *s, int c) だよ

338 名前:312 mailto:sage [2007/08/23(木) 20:38:42 ]
レス遅くなってすいません。

>>316の[^=]を使う方法を試したのですがうまくできなかったです。。。
strtokを使うしかないって事ですかね

339 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:39:29 ]
ttp://www.bohyoh.com/CandCPP/C/Library/strchr.html



340 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:40:21 ]
>>336
>構造体の要素って順番に並んでるとは規定されてないけどね。
またいい加減なことを…ここは入門者が答えるスレ?

341 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:41:54 ]
>>336
だからgets肯定派のダンディ坂野は回答しなくて良いよって言っただろ?
ったく、これだから夏厨は・・・

342 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:18:41 ]
>bb = aa;

343 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:30:38 ]
>>336
規定されてるよ

344 名前:336 mailto:sage [2007/08/23(木) 22:11:17 ]
>>340
>>336
お、ずっと勘違いしてた。やべ
ははははh

345 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:29:21 ]
パディングが挟まってる可能性はあるが、順番はそのまま。

346 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:08:32 ]
全くの初心者です。質問ですが、

#include <stdio.h>
main()
{
printf("Hello World\n");
}

を、Cygwinでコンパイルしたいのですが、うまくいきません。
何故でしょうか。

347 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:10:40 ]
エラーメッセージを読め

348 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:30:46 ]
gcc インストールし忘れているに 100 ガバス

349 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 10:08:44 ]
>>338
どううまくできなかったのか。
ちゃんと
*key は key[128]
*value は value[128]
とかにしたか?



350 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:50:23 ]
ヘッダーファイルについて質問なのですが、自作ヘッダーにsleepという関数を
作るとします。実際この関数を使おうと#includeしようとしたら同じく#includeした
time.hライブラリーにも同じ関数がある事に気づきました。
同じ名前の関数がある場合、関数の使用優先度って何で決まるんですか?

351 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:52:15 ]
>>350
多分リンクした順だけど、普通はリンク時にエラーがでると思うよ

352 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:56:37 ]
先にldが見つけたほうではないかな?

ふつうは自作の関数の名前を変えると思うんだが

353 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:57:20 ]
そうなんですか。eclipse,CDTで開発してるんですが、予想通りでした。
ありがとうございました。

354 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:04 ]
>>351
エラーは出ないんじゃないかな。
関数の戻り値なり引数なりの型が違うなら、
コンパイル時にエラーになると思う。
警告かも知れない。

355 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:27:57 ]
Japan 1 0 2
Spain 2 0 1
Egypt 1 2 0
のように入力して、数字を左から 3点 0点 1点分と数えて点数の高い順に並べ
Spain, 7
Japan, 5
Egypt, 3
のように出力したい場合二次元配列使うと思うんだけど、データの型はどうすればいい?
全部intで出力のときだけ %s,%d で合ってますか?


356 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:14 ]
>>355
おれだったら、構造体の一次元配列で処理する。

357 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:58:03 ]
struct hoge
{
char name[1024];
int mark;
}

358 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:24:47 ]
生のデータを持つために、
struct {
char name[1024];
int mark[3];
}

359 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:58:54 ]
a = (struct A *)buf;
b = (struct B *)buf+20;

Bの構造体にbufの20バイト後から取り出したいんだけど
この記述はできない?



360 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:15 ]
>>359 の記述のままでもおk
でも、>>359 は何か根本的なことが分かっていない気がする

361 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:53 ]
>>359
bufがchar *などであるなら、
struct B b=*(struct B*)(buf+20)

362 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:09:37 ]
>>360
すっとこどっこい。

363 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:17:56 ]
offsetとか使いたいのではないのかなあ

364 名前:359 mailto:sage [2007/08/25(土) 22:23:25 ]
一応できた.
でもあんまり理解してないorz

365 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 00:57:24 ]
システムコールってC言語ですか?

366 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:15:28 ]
共用体(union)の中で構造体使うと
うまく領域を確保できなくてデータが変になる現象が起きてます。

今は使わない文字配列を共用体の中に書いて
無理やり余裕を持たせて領域確保してるんですが
共用体で使うメモリ領域をうまく確保する方法はありますか?

ちなみに環境はVineLinux4.1でgcc3.3.6コンパイラ使ってます。

367 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:24:22 ]
うまくいかないソースと現象の詳細を示せ

368 名前:366 mailto:sage [2007/08/26(日) 08:00:38 ]
説明しにくいんですけど
2Dのrobocup用ライブラリlibsclientをいじってて
http://www.koders.com/c/fidD6E7EBDD071F6F9579D1CAF12EF2FC434F5F7074.aspx
292~295行目
typedef struct _Ppos {
        WhichTeam team ;  // enum(WhichTeam=int)
        int unum ;
} PlayerInfo ;
に「int type;」というのを追加してライブラリとプレイヤーを再コンパイルして
実際にサーバーに接続してみたら動作が明らかに変になるんです。
312~317行目
        union {
        PlayerInfo player ;// 292~295行目の構造体
                Side side ;          // enum(Side=int)
                FlagPos fpos ;     // enum(FlagPos=int)
                LinePos lpos ;     // enum(LinePos=int)
        } id ;
ここに「char hoge[30];」を追加すると問題なく動作するようになるんで
共用体で構造体の大きさの領域が確保できてないという結論に至ったわけです。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:14:49 ]
結論に至る前に sizeof で大きさを調べてみろ



370 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:08:10 ]
make cleanしてないんじゃねーの?

371 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:27:06 ]
>>365
システムコールはC言語でもサポートされていますが
システムコールはC言語ではありません

372 名前:366 mailto:sage [2007/08/26(日) 13:49:54 ]
>>370
それでしたorz
ライブラリとプレイヤ自体はmake cleanしてたんですが
ライブラリを読み込んでるプレイヤ共通の関数をまとめたやつをし忘れてました。

>>367,>>369,>>370こんな僕にレスしてくれてありがと

373 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:34:06 ]
相談なんですが,ファイルに以下のように保存されていて,
a[1]=AAA
a[2]=BBB
a[4]=DDD
これを以下のように新規で追加,削除,変更などしたい場合,
a[1]=AAA
a[2]=ABC
a[3]=DEF
一回全部読み込んでbufなどに保存し,それから一気に全部ファイルへ書き込む方法が
あると思いますが,それ以外に方法ありますか?


374 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:43 ]
>>373
固定長レコードもファイルならfseekで該当レコードのところにファイルポインタを
位置決めしてfwriteでレコードを上書き。

375 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:53:28 ]
>>373
データをファイルの最後尾に書き込みして
読み込み時、重複する場合は「もっとも後ろにあるデータ」を有効とするとか

たとえば

a[1]=AAA
a[2]=BBB
a[4]=DDD
  ↓
a[1]=AAA
a[2]=BBB
a[4]=DDD
a[3]=DEF
a[2]=ABC
a[4]=

読み込み時にデータ(a[2]=BBB)をデータ(a[2]=ABC)で上書きする感じ
a[3] は新規追加、a[2]は変更、a[4]は値なしなので削除

376 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:01:50 ]
>>374
その標準関数を使ったことないんで調べてみます

>>375
その方法も考えたんですが,何回も書き込みを行うとデータが多くなり
読み込むのに時間がかかりそうなんで,有効データだけ残す方法をとりたいですね

お二人様サンクスです!検討してみます

377 名前:デフォルトの名無しさん [2007/08/27(月) 17:11:43 ]
超初心者ですみません。
2の0乗+2の1乗+2の2乗+2の3乗+2の4乗+・・・
というプログラムはどのようにしたらよいのでしょうか?
いろいろ調べてかいてみたのですができませんでした><
どなたかアドバイスお願いしますm(__)m

378 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:19:53 ]
1 + 2 + 2 * 2 + 2 * 2 * 2 + 2 * 2 * 2 * 2 + ...

379 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:40:04 ]
for(n=1, sum=0;;n*=2) sum+=n;



380 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:47:15 ]
>>377
しょぼくて申し訳ないが、
int hoge(int count){
 int result = 1; 
 if(count <= 0)
  return 1;
 for(int i=1;i<count;i++){
  result += 2*i;
 }
 return result + hoge(count-1);
}

381 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:12:29 ]
二進法で結果を出力するプログラムならこれでいいよ。

#include <stdio.h>

int main(void)
{
  for (;;)
    putchar('1');
}

382 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:14:02 ]
// ウンコード
int func(size_t n) {
int ret = 1;
size_t i;
for (i = 1; i < n+1; ++i)
ret += 1<<i;
return ret;
}

383 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:15:40 ]
ウンコードなんて、クソースのパクリみたいだな、¢50徴収するぞ?

384 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:00:13 ]
>>377
pow(2, n+1) - 1

385 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:40:33 ]
>>377
~(~0<<n)

386 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:01:40 ]
ビット演算凄いです^o^

387 名前:デフォルトの名無しさん [2007/08/27(月) 21:15:03 ]
Javaで言うところの「equals」ってC言語だと何ですか?

388 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:00 ]
Javaの何のクラスのequals?

389 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:59 ]
>>387
==



390 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:18:36 ]
>>387
C言語には対応するものはないかな?
C++なら、状況応じて==をequals風に定義しなおすことになる。文字列とか。
Javaのように==とequalsを明確に区別することはできない。

391 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:34 ]
Stringクラスのequalsならstrcmp関数だろ
あくまで、文字列比較という意味でね

もっとも、equalsメソッドはオブジェクトのデータの比較だから
そういう意味なら、オブジェクト指向でないCにはそれに該当するものはない

392 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:31:41 ]
memcmp (^^;

393 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:11:53 ]
Cの場合、
構造体だと、専用の比較関数作らなきゃならんね。

394 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:18:11 ]
Object.equalsだったら、ポインタに対する==演算子が最も当てはまる存在だな。

395 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:27:05 ]
387です
失礼しました、説明が足りなかったようで・・・
Javaでは、([変数].equals("○○○")) と書くところを
C言語だとどのように書くのかという意味です

396 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:16 ]
>>395
何も読んでないのか?
クラスによってequalsの挙動は違うだろうが。

397 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:47 ]
>>395
[変数]の型は何?
派生クラスでオーバーライドできるから、
クラスによって挙動が違い、Cで対応するものも異なる。

なお、Stringなら>>391

398 名前:デフォルトの名無しさん [2007/08/27(月) 22:48:56 ]
ファイルのプロパティの概要で表示されるタイトルに
そのファイルの拡張子を除いたファイル名を設定するプログラムを作成したいのですが
どのようにすればタイトルに書き込めるのでしょうか?

399 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:24 ]
>>395
if (strcmp(変数, "○○○”) == 0) ・・・



400 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:55:30 ]
>>398
プロパティ窓を取得、拡張子まで削ってSetWindowText

401 名前:398 [2007/08/27(月) 23:11:00 ]
>>400
プロパティ窓はどのようにして取得するのでしょうか?

402 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:17:33 ]
>>398
IPropertyStorageでググればいろいろ見付かる。
ただし、Cでやるのは面倒。少なくともC++は欲しい。

なお、この情報は、NTFSの副次ストリームに保管される。
あるいは、OLE構造化ストレージ(2003までWord/Excelファイルなど)なら
ファイル自身に保管される(このため構造化ストレージならNTFSでなくても可能)。


403 名前:398 mailto:sage [2007/08/27(月) 23:20:09 ]
>>402
Cでは厳しいですか・・
調べてみます
ありがとうございました

404 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:01:37 ]
t

405 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 03:30:57 ]
>>404
ありがとうございました

406 名前:デフォルトの名無しさん [2007/08/29(水) 11:41:07 ]
377です。
みなさんありがとうございます><

407 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:34:19 ]
* 引数 :char *data : 追加したい文字列
* : int index : 追加したい位置
* : element *new_data : 新しく追加するリスト
* 戻り値:成功1,失敗-1
*/
int add_data(char *data, int index, ELEMENT *new_data){
ELEMENT *tmp;
int cnt = 0;

if(data == NULL || index < 0 || index > element_cnt || new_data == NULL){
return -1;
}
new_data->data = data;
/* インデックスの位置の直前に移動 */

for(tmp = head;cnt != index;cnt++,tmp = tmp->next);
new_data->next = tmp->next;
tmp->next = new_data;
printf("help\n");
return 1;
}
こんな感じでリスト構造にデータを入れる関数を作ったんですが、
Borlandでは正しく動くのにVisual Studioでは呼び出しもとに返らず終了してしまいます
helpというプリント文は表示されます。どなたか、解決策を教えてもらえませんか?
↓がリストの構造体です
typedef struct element {
char *data;
struct element *next;
} ELEMENT;


408 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:11:45 ]
>>407
そのソースだけだとわかんないなぁ
引数の「char *data」はその都度領域確保されているの?
それから「element_cnt」って要素数だよね?いつインクリメントしてる?

409 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:14:25 ]
>>407
デバッガでも使って確かめろ位しか



410 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:20:40 ]
>>408
そうですよね。>>409さんのデバッガを調べてみます
「char *data」はただダブルコーテーションで文字列を渡すだけしてます
「element_cnt」については処理を書き込み忘れました

411 名前:408 mailto:sage [2007/08/29(水) 21:31:46 ]
>>407
それから追加するインデックスを0にした場合は
実際に追加されるのはインデックス1の場所にならない?
0の場合headを書き換えないとおかしくなるんじゃない?

まぁあと/* インデックスの位置の直前に移動 */ といっているけど
cnt!=index ってことはindex の位置で止まる

>new_data->next = tmp->next;
index+1の要素を新要素の次の要素にする
>tmp->next = new_data;
indexの次の要素を新要素にする

結局追加される場所はindex+1の場所にならない?

412 名前:407 mailto:sage [2007/08/29(水) 21:50:13 ]
>>411
すいません!書き忘れてましたけど、headはstatic変数で今回ダミーとして扱います
ちなみにheadはhead->next = NULLで初期化してあります。

for文の初期化でtmp = head;とあるので、head->nextでダミーではない値をもつリストに入るときにはcntは1になっています
なのでcnt == indexはひとつ前になるんじゃないかな〜と考えてます。間違えてたらすいません




413 名前:408 mailto:sage [2007/08/29(水) 21:54:23 ]
>>412
つまり head->next が最初の要素ってことですね
なら納得です

だとすると、やはりこのソースからだと分かりませんね
私はここまでです

414 名前:407 mailto:sage [2007/08/29(水) 22:11:13 ]
>>413
そうですか、ありがとうございました。
原因はこれだけのソースではわからないと思うので、ななし.orgに全部のソースをアップしました
見てくれるなら見てほしいです。んでVisualStudioで実行してほしいです

まだ途中なんでできたらツッコミとかよろしくおねがいします



415 名前:408 mailto:sage [2007/08/29(水) 22:33:26 ]
>>414
そういうときはURLも貼ってくれないと
ななし.orgってどこですか?

416 名前:407 mailto:sage [2007/08/29(水) 22:43:24 ]
すいません。。ここです
77c.org/upload.php?fn=off&page=1

417 名前:408 mailto:sage [2007/08/29(水) 23:02:01 ]
>>416
まずここかな

void init_list(void){
ELEMENT top;
head = ⊤

element_cnt = 0;
head->next = NULL;printf("\(^o^)/");
}

ELEMENT top; は関数のローカル変数
head = ⊤
top の実体は関数抜けたら無効になる
にも関わらず 関数外でhead(top) にアクセスしてる

418 名前:407 mailto:sage [2007/08/29(水) 23:12:46 ]
>>417
ああ〜!そうですねw普通におかしいですね

419 名前:408 mailto:sage [2007/08/29(水) 23:16:02 ]
>>418
一応こちらの環境(BCC5.5)では>>417を改善することで動作はします
(もう少し動作チェックしてみますが)

それから余談ですが、ポインタ配列使うなら ELEMENT next いらないんじゃないですか?
せっかくポインタ繋ぎしてるんですから add_data() 内で new_data=(ELEMENT *)malloc(sizeof(ELEMENT)) してみては?
いまは動作チェックが目的でこうしているというならゴメンナサイね

それから最後にfree()も忘れずに



420 名前:407 mailto:sage [2007/08/29(水) 23:24:18 ]
改善しました!>>408さん、ありがとうございました!

関数内でmallocはしなくて良い、と言う問題だったので、main側で確保したんです。
自分も関数内で確保した方がいいと思うのですが・・・

421 名前:408 mailto:sage [2007/08/29(水) 23:52:07 ]
>>420
そういうことですか
分かりました
それらが題意であるならしょうがないですね

余計なことかもしれませんが、
remove_element() は要素を削除するんですよね?
この方法(配列上で行う連結リスト)だと要素を削除した後、その後追加する際に、
空いている要素と空いていない(使われている)要素の区別がつかないので
その点も考慮していく方がよろしいかと思います






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef