0

我只是想开始学习 C http://fromlearncodethehardway.com。但是,在尝试从那里编写其中一个示例时,我遇到了分段错误。这是我的源代码的链接。我尝试使用 valgrind 进一步帮助调试,但我似乎无法找出问题所在。这是来自 valgrind 的堆栈跟踪。

   ~/Chardway$ valgrind ./ex17 db.dat g
   ==4423== Memcheck, a memory error detector                                                                                 == 4423== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
 ==4423== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
 ==4423== Command: ./ex17 db.dat g
 ==4423== 
 ==4423== Invalid read of size 1
 ==4423==    at 0x4EA4F1D: _IO_file_fopen@@GLIBC_2.2.5 (fileops.c:271)
 ==4423==    by 0x4E99DB5: __fopen_internal (iofopen.c:93)
 ==4423==    by 0x400A76: Database_open (ex17.c:65)
 ==4423==    by 0x400F7C: main (ex17.c:151)
 ==4423==  Address 0x722b is not stack'd, malloc'd or (recently) free'd
 ==4423== 
 ==4423== 
 ==4423== Process terminating with default action of signal 11 (SIGSEGV)
 ==4423==  Access not within mapped region at address 0x722B
 ==4423==    at 0x4EA4F1D: _IO_file_fopen@@GLIBC_2.2.5 (fileops.c:271)
 ==4423==    by 0x4E99DB5: __fopen_internal (iofopen.c:93)
 ==4423==    by 0x400A76: Database_open (ex17.c:65)
  ==4423==    by 0x400F7C: main (ex17.c:151)
.....

  ==4423== For counts of detected and suppressed errors, rerun with: -v
  ==4423== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 4 from 4)
 Segmentation fault

对调试的任何帮助都会很棒。谢谢!

4

2 回答 2

5

在您的代码中,您可以fopen调用fopen(filename,'w');& fopen(filename,'r+');。那些应该是fopen(filename,"w");& fopen(filename,"r+");。第二个参数fopen应该是const char *
希望这有帮助!

于 2012-04-19T17:45:35.197 回答
0

顺便说一句,我认为您的意思是http://c.learncodethehardway.org/
您提供的地址无法解析。

于 2012-04-19T20:14:16.300 回答