关于 Abort trap: 6 的问题

第一次提问,略显紧张。问题可能有些幼稚,希望大神们海涵。本人写了一段c代码,
运行平台是linux/unix, 扫描该绝对路径下的所有文件项,当遇到目录文件时用继续展
开,简单来说就是一个文件的树形图,可以顺利运行,但是当扫描的文件数目较多的时候
比如从根目录扫描或者从home 目录扫描,可以运行成功,但运行完之后下面就会出现
Abort trap: 6的错误信息。说的不是很清晰,直接上代码。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 void printdir(char name, int width)
8 {
9 DIR
dp;
10 dp = opendir(name);
11 if(dp == NULL)
12 {
13 perror("opendir");
14 exit(-1);
15 }
16 struct dirent *dir_file;
17 struct stat s_file;
18 int ret;
19 char buf[256];
20 memset(buf, 0, sizeof(buf) );
21 readdir(dp);
22 readdir(dp);
23 while( (dir_file = readdir(dp) ) != NULL)
24 {
25 sprintf(buf, "%s%s%s", name, "/", dir_file->d_name);
26 ret = stat(buf, &s_file);
27 if(ret != 0)
28 {
29 perror("stat");
exit(-1);
31 }
32 printf("%*s%-10s\n",width, "", dir_file->d_name);
33 if(S_ISDIR(s_file.st_mode) )
34 {
35 printdir(buf, width + 4);
36 }
37 }
38 closedir(dp);
39 }
40 int main(int argc, char *argv[])
41 {
42 if(argc < 2)
43 {
44 perror("argc wrong");
45 exit(-1);
46 }
47 printdir(argv[1], 0);
48 }