2013-12-21 232 views
0

我在D中創建了一個程序來生成(n + 1)個第一個Stern-Brocot序列。設SB(n)爲(n + 1)斯特恩 - 布魯科特序列。我將SB(n)存儲到名爲「n.txt」的文件中。 SB(n)包含(2^n)+1個元素。這個過程很簡單,我們要求一個整數n,並且我們生成SB(0),SB(1)... SB(n)。 問題是,當n> = 15時,我得到:「Segfault(核心轉儲)」。D SEGFAULT(核心轉儲)

的代碼是:

​​

我不知道爲什麼我得到這個段錯誤。你知道爲什麼嗎?

我的D編譯器是LDC。

核心文件:

Program received signal SIGSEGV, Segmentation fault. 
0x00007ffff7a89742 in _aaInX (aa=<incomplete type>, 
    keyti=0x482e80 <TypeInfo_S3std8typecons18__T5TupleTAyaTAxaZ5Tuple.__init()>, pkey=0x7fffffffd610) at aaA.d:371 
371    auto e = aa.a.b[i]; 
(gdb) bt 
#0 0x00007ffff7a89742 in _aaInX (aa=<incomplete type>, 
    keyti=0x482e80 <TypeInfo_S3std8typecons18__T5TupleTAyaTAxaZ5Tuple.__init()>, pkey=0x7fffffffd610) at aaA.d:371 
#1 0x000000000044e44a in std.functional.__T7memoizeS83_D3std5regex18__T9regexImplTAyaZ9regexImplFNfAyaAxaZS3std5regex 12__T5RegexTaZ5RegexVi8Z.memoize() (
    _param_0=..., _param_1=...) at /usr/include/d/std/functional.d:602 
#2 0x000000000042f5aa in std.regex.__T5regexTAyaZ.regex() (pattern=...,flags=...) at /usr/include/d/std/regex.d:6461 
#3 0x000000000042451e in dev.extract() (s=...) 
    at /home/jonathan/Documents/Recherche/Fermat/SBs/D/Dev/dev.d:134 
#4 0x00000000004238cb in dev.SB() (n=15) 
    at /home/jonathan/Documents/Recherche/Fermat/SBs/D/Dev/dev.d:39 
#5 0x0000000000423547 in D main() 
    at /home/jonathan/Documents/Recherche/Fermat/SBs/D/Dev/dev.d:17 
#6 0x00007ffff7a82ab1 in rt.dmain2._d_run_main() (mainFunc=0x423500 <D main>) 
    at dmain2.d:607 
#7 0x00007ffff7a82a3a in rt.dmain2._d_run_main()() at dmain2.d:582 
#8 0x00007ffff7a82b09 in rt.dmain2._d_run_main()() at dmain2.d:618 
#9 0x00007ffff7a82a3a in rt.dmain2._d_run_main()() at dmain2.d:582 
#10 0x00007ffff7a829ed in _d_run_main (argc=1, argv=0x7fffffffe148, 
    mainFunc=0x423500 <D main>) at dmain2.d:628 
#11 0x00007ffff7a825a2 in main (argc=1, argv=0x7fffffffe148) at dmain2.d:383 
#12 0x00007ffff6a64b45 in __libc_start_main (main=0x422cc0 <[email protected]>, argc=1, ubp_av=0x7fffffffe148, init=<optimized out>, fini=<optimized out>,rtld_fini=<optimized out>, stack_end=0x7fffffffe138) at libc-start.c:274 
#13 0x0000000000423439 in _start() 
+0

你是否通過調試器運行它以查看它墜毀的位置?您也可以將核心文件加載到調試器中。爲了記錄,似乎在我的系統上至少n = 25運行良好。 – harald

+0

同樣在這裏;它編譯並在n> = 15上運行。你可以在另一個編譯器上嘗試它,比如dmd嗎? – Nil

+0

你能得到這次崩潰的堆棧跟蹤嗎?在gdb中,輸入'bt'。 – harald

回答

0

是否使用Fedora的倉庫LDC?

如果是這樣,請嘗試不同的D編譯器,或者嘗試使用不同的LDC版本。 Fedora的LDC使用共享庫,Phobos不支持並導致段錯誤。