数値を大きくすると動かなくなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
絵にかいた餅
記事: 13
登録日時: 1年前

数値を大きくすると動かなくなる

#1

投稿記事 by 絵にかいた餅 » 1年前

現在GAを用いたナーススケジューリング問題について勉強しています。そこでは二次元配列を用いるのですが、配列の要素数を大きくすると動かなくなってしまいます。ある一定の数までは動くためプログラミング自体はできているとおもうのですが。。
いろいろ自分なりに考えて改良をしていったのですが、そもそも動かなくなってしまったりと、泥沼にはまってしまいます。
自分の考えとしてはメモリを使いすぎてしまっているのかなと思っているのですが、対処法がわかりません。
皆さんの考えをお聞きしたいです。よろしくお願いします。
(コードを載せようとしましたが500行を超えてしまっているため、お見苦しいかなと思い原因についてお聞きしました。)

box
記事: 2002
登録日時: 13年前

Re: 数値を大きくすると動かなくなる

#2

投稿記事 by box » 1年前

ソースコードが提示されてへんから何とも言えんけど、
配列をstaticにしてみるとか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

絵にかいた餅
記事: 13
登録日時: 1年前

Re: 数値を大きくすると動かなくなる

#3

投稿記事 by 絵にかいた餅 » 1年前

実はそれすでに試したのですが”外部シンボルが未解決です”というエラーが出てしまいます。

box
記事: 2002
登録日時: 13年前

Re: 数値を大きくすると動かなくなる

#4

投稿記事 by box » 1年前

外部シンボルが未解決っちゅうんは
配列のサイズの問題やなくて
関数名のスペリングが間違うてるとかいう感じで
あるはずのない関数を呼んでしもてる、とかとちゃうかな?
確認してみては?
あるいは、そのときのエラーメッセージを提示するとか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 数値を大きくすると動かなくなる

#5

投稿記事 by みけCAT » 1年前

「動かなくなる」というのは
・コンパイルが通らなくなる
・コンパイルは通るけど、実行すると異常終了する
・コンパイルは通り、実行でき、なかなか結果が出ない
どれですか?

また、「一定の数」というのはどの程度ですか?
数によっては、本当にメモリを使いすぎかもしれません。
目安として、1要素が4バイトの場合
1024×1024 → 4MiB
2048×2048 → 16MiB
8192×8192 → 256MiB
16384×16384 → 1GiB
32768×32768 → 4GiB
65536×65536 → 16GiB
となります。
同じ要素数・要素のサイズの配列を複数用いる場合、記憶容量もそれに応じて大きくなります。
32bitのプロセスだと、最大でも約4GiBくらいまでしかRAMを使えない可能性もあります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

絵にかいた餅
記事: 13
登録日時: 1年前

Re: 数値を大きくすると動かなくなる

#6

投稿記事 by 絵にかいた餅 » 1年前

関数名を間違えてるといったことはなかったです。
エラーメッセージは
”外部シンボル"public:static int(*shift::nurse_work)[30])"(?nurse_work@shift@@2PAY0BO@HA)は未解決です”となっています。下のURLからするとビルドができなかったのでコンパイルに何か原因ができた感じでですかね?

https://learn.microsoft.com/ja-jp/cpp/e ... w=msvc-170

絵にかいた餅
記事: 13
登録日時: 1年前

Re: 数値を大きくすると動かなくなる

#7

投稿記事 by 絵にかいた餅 » 1年前

コンパイルは通っているけど何も結果が出ずに終了するといった感じです。(staticをつけない場合)
一定の数というのは構造体に二次元配列を定義していて、構造体の数は100個、二次元配列の大きさは4*10で、表のテーブルとしては4000です。ただ、別の配列に一つ一つ置き換えていたり、ループ回数もかなり使ってはいます。

dic
記事: 657
登録日時: 13年前
住所: 宮崎県
連絡を取る:

Re: 数値を大きくすると動かなくなる

#8

投稿記事 by dic » 1年前

どこかに発見されていないバグがあるとしか
いいようがないですね

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 数値を大きくすると動かなくなる

#9

投稿記事 by みけCAT » 1年前

絵にかいた餅 さんが書きました:
1年前
エラーメッセージは
”外部シンボル"public:static int(*shift::nurse_work)[30])"(?nurse_work@shift@@2PAY0BO@HA)は未解決です”となっています。
メンバの定義ではなく、インスタンスの定義 (構造体の変数宣言) に static をつけるとどうなりますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

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