メモリ領域の確保と構造体の宣言

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

メモリ領域の確保と構造体の宣言

#1

投稿記事 by ふっきー » 17年前

struct v4_so v4_so_data[10000]によりv4_so型構造体v4_so_dataを10000個宣言したいのですが、
コンパイルして実行すると、メモリ領域が確保できずに実行がストップしてしまいます。
メモリ領域を確保する命令 malloc(sizeof(struct v4_so)*10000) を先頭に書きましたが、
それでもまだ動きません。
おそらく、malloc(sizeof(struct v4_so)*10000)により確保された領域に、
10000個のv4_so_dataをうまく配置することが出来ていないのだと思います。
どうすればいいのでしょうか?よろしくお願いします。

たかぎ

Re:メモリ領域の確保と構造体の宣言

#2

投稿記事 by たかぎ » 17年前

> メモリ領域を確保する命令 malloc(sizeof(struct v4_so)*10000) を先頭に書きましたが、
> それでもまだ動きません。

具体的にどう書いたのですか?
単に配列を使いたいだけなら、
struct v4_so v4_so_data[10000];
でよいはずです。

環境が不明なので正確なことはいえませんが、C90では1個のオブジェクトににつき32767バイトまでしか保証されませんので、struct v4_so型が4バイト以上であればこの制限にかかってくる可能性はあります(多分問題ないと思います)。

バグ

Re:メモリ領域の確保と構造体の宣言

#3

投稿記事 by バグ » 17年前

mallocを使用して動的に確保していのならば…

v4_so* pt = (v4_so*)malloc(sizeof(v4_so) * 10000);

こんな感じでしょうか?

何にせよ、たかぎさんの言われるように、ふっきーさんがどうのように書いたのかによって回答が変わってきそうに思いますね。

ふっきー

Re:メモリ領域の確保と構造体の宣言

#4

投稿記事 by ふっきー » 17年前

/* メモリの確保 */
struct v4_so* pt = (struct v4_so*)malloc(sizeof(struct v4_so) * 10000);

/* 変数の宣言 */
struct v4_format v4_format_data;
struct v4_so v4_so_data[10000];

現在このような状況です。構造体v4_soは文字配列を含むためかなり大きいです。
コンパイルは通りますが、メモリの確保する所でシグウィンがとまってしまいます。

box

Re:メモリ領域の確保と構造体の宣言

#5

投稿記事 by box » 17年前

「かなり大きい」だと状況がよくわからないです。
sizeof(struct v4_so) の値はいくらですか?

ふっきー

Re:メモリ領域の確保と構造体の宣言

#6

投稿記事 by ふっきー » 17年前

sizeof(struct v4_so)の値は1584です。

keichan

Re:メモリ領域の確保と構造体の宣言

#7

投稿記事 by keichan » 17年前

> struct v4_so v4_so_data[10000];
これ、スタックに確保しちゃいますがいいのでしょうか?
mallocで確保したptを使用するようにしても落ちますか?

ふっきー

TO keichan

#8

投稿記事 by ふっきー » 17年前

> struct v4_so v4_so_data[10000];
これ、スタックに確保しちゃいますがいいのでしょうか?
mallocで確保したptを使用するようにしても落ちますか?

いえ、mallocで確保したptの使用法方法がわからないんです。。。。。。。

toyo

Re:TO keichan

#9

投稿記事 by toyo » 17年前

/* メモリの確保 */
struct v4_so* v4_so_data = (struct v4_so*)malloc(sizeof(struct v4_so) * 10000);
if (v4_so_data == NULL) {
    fprintf(stderr, "malloc error\n");
}
で後は普通に配列としてアクセスできます。
v4_so_data[0] ~ v4_so_data[9999]

ふっきー

to toyo

#10

投稿記事 by ふっきー » 17年前

toyoさん、できました!
他の方々のお話も、とても参考になりました。
皆さんありがとうございました。

閉鎖

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