そこで、プロジェクトのために、最初に裸のシングル (可能な値が 1 つしかないセル) を使用し、次に力ずくで勝利する数独ソルバーを作成することにしました。
プログラムで複数のファイルを使用するのはこれが初めてであり、メイクファイルを使用するのは初めてですが、コンパイル時に発生するエラーではないため、メイクファイルは問題ないと思います。
GSB でデバッグを試みましたが、あまり役に立たないようです...推測する必要がある場合は、クラスのセルのデストラクタで問題が発生していると思います。
プロジェクトの簡単な概要を説明して、コードを吐き出さないようにします。クラス パズルには、Cell クラスの 9x9 行列が含まれています。クラス Cell には、ボード上の位置 (行と列) を表す 2 つの整数、整数値 (セルの実際の値)、およびセルの値の可能な候補を表す 9 つのブール値の配列 (0 の配列は値が可能な候補ではないことを表し、1 はそうであることを意味します) - たとえば、候補 [2] は配列の 3 番目の値であるため、1 の場合、セルの可能な値は 3 であることを意味します。
コードに移ります。私のコードは、main.cpp、puzzle.cpp、cell.cpp、puzzle.h、cell.h の 5 つのファイルで構成されています。これは、5 つのファイルと makefile の私のペーストビンへのリンクです。
puzzle.cpp の巨大な関数 (checkConflicts() と removeCandidates()) には注意を払わないことをお勧めします。どちらも、セルが競合しないようにするステートメントや競合候補を排除する長い if ステートメントだからです。
デバッガーは、候補配列を削除するセル デストラクタにジャンプしますが、問題はありません。
プログラムを作成して実行した後に発生するエラーのコピーを次に示します。
$ make
g++ -c puzzle.cpp cell.h
g++ -c cell.cpp
g++ -o sudsolve main.cpp puzzle.o cell.o
$ ./sudsolve
*** Error in `./sudsolve': munmap_chunk(): invalid pointer: 0x0000000000a30fd4 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7f576)[0x7fcaecc1f576]
./sudsolve[0x40bbdb]
./sudsolve[0x401cd2]
./sudsolve[0x402a12]
./sudsolve[0x402a84]
./sudsolve[0x402299]
./sudsolve[0x401e38]
./sudsolve[0x40156a]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fcaecbc1ea5]
./sudsolve[0x400eb9]
======= Memory map: ========
00400000-0040e000 r-xp 00000000 fc:04 2097787 /home/silman/Documents/programming/ecs60/sudsolve/sudsolve
0060d000-0060e000 r--p 0000d000 fc:04 2097787 /home/silman/Documents/programming/ecs60/sudsolve/sudsolve
0060e000-0060f000 rw-p 0000e000 fc:04 2097787 /home/silman/Documents/programming/ecs60/sudsolve/sudsolve
00a30000-00a51000 rw-p 00000000 00:00 0 [heap]
7fcaec89b000-7fcaec99e000 r-xp 00000000 fc:04 1576781 /lib/x86_64-linux-gnu/libm-2.17.so
7fcaec99e000-7fcaecb9e000 ---p 00103000 fc:04 1576781 /lib/x86_64-linux-gnu/libm-2.17.so
7fcaecb9e000-7fcaecb9f000 r--p 00103000 fc:04 1576781 /lib/x86_64-linux-gnu/libm-2.17.so
7fcaecb9f000-7fcaecba0000 rw-p 00104000 fc:04 1576781 /lib/x86_64-linux-gnu/libm-2.17.so
7fcaecba0000-7fcaecd5e000 r-xp 00000000 fc:04 1576733 /lib/x86_64-linux-gnu/libc-2.17.so
7fcaecd5e000-7fcaecf5d000 ---p 001be000 fc:04 1576733 /lib/x86_64-linux-gnu/libc-2.17.so
7fcaecf5d000-7fcaecf61000 r--p 001bd000 fc:04 1576733 /lib/x86_64-linux-gnu/libc-2.17.so
7fcaecf61000-7fcaecf63000 rw-p 001c1000 fc:04 1576733 /lib/x86_64-linux-gnu/libc-2.17.so
7fcaecf63000-7fcaecf68000 rw-p 00000000 00:00 0
7fcaecf68000-7fcaecf7c000 r-xp 00000000 fc:04 1576758 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fcaecf7c000-7fcaed17c000 ---p 00014000 fc:04 1576758 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fcaed17c000-7fcaed17d000 r--p 00014000 fc:04 1576758 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fcaed17d000-7fcaed17e000 rw-p 00015000 fc:04 1576758 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fcaed17e000-7fcaed263000 r-xp 00000000 fc:04 271362 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fcaed263000-7fcaed462000 ---p 000e5000 fc:04 271362 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fcaed462000-7fcaed46a000 r--p 000e4000 fc:04 271362 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fcaed46a000-7fcaed46c000 rw-p 000ec000 fc:04 271362 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fcaed46c000-7fcaed481000 rw-p 00000000 00:00 0
7fcaed481000-7fcaed4a4000 r-xp 00000000 fc:04 1576709 /lib/x86_64-linux-gnu/ld-2.17.so
7fcaed684000-7fcaed689000 rw-p 00000000 00:00 0
7fcaed6a0000-7fcaed6a3000 rw-p 00000000 00:00 0
7fcaed6a3000-7fcaed6a4000 r--p 00022000 fc:04 1576709 /lib/x86_64-linux-gnu/ld-2.17.so
7fcaed6a4000-7fcaed6a6000 rw-p 00023000 fc:04 1576709 /lib/x86_64-linux-gnu/ld-2.17.so
7fff88ba8000-7fff88bc9000 rw-p 00000000 00:00 0 [stack]
7fff88bfe000-7fff88c00000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)