Schrift
[thread]9116[/thread]

Anzahl möglicher Dimensionen: Bei Has bzw Arrays (Seite 2)



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Linuxer
 2007-06-26 01:17
#77782 #77782
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
edit:

Der kleinste Wert, der bei mir einen Segfault beim Aufräumen verursacht, liegt um die 29065.
29065 : 100 Durchläufe ohne Segfault;
29066 : 100 Durchläufe mit 1 Segfault;
29067 : 100 Durchläufe mit 3 Segfault;
29068 : 100 Durchläufe mit 8 Segfault;
...


Getestet mit:
Code: (dl )
export Y=29068; for x in {1..100}; do  /usr/bin/perl segfault.pl $Y || echo $x; done


und segfault.pl:
Code: (dl )
1
2
3
4
5
6
7
my %hash = (foo => {});
my $ref = \%hash;

for (0 .. shift @ARGV ) {
$ref = $ref->{foo};
$ref->{foo} = {};
}



:/edit

Der strace des ganzen bringt mir auch nicht wirklich eine Erleuchtung:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
execve("/usr/bin/perl", ["/usr/bin/perl", "segfault.pl"], [/* 61 vars */]) = 0
brk(0) = 0x8140000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f94000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=130952, ...}) = 0
mmap2(NULL, 130952, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f74000
close(3) = 0
open("/lib/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360L\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=123079, ...}) = 0
mmap2(NULL, 90592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f5d000
mmap2(0xb7f70000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12) = 0xb7f70000
mmap2(0xb7f72000, 4576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f72000
close(3) = 0
open("/lib/libnsl.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\3605\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=76884, ...}) = 0
mmap2(NULL, 87848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f47000
mmap2(0xb7f59000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11) = 0xb7f59000
mmap2(0xb7f5b000, 5928, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f5b000
close(3) = 0
open("/lib/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\f\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=10144, ...}) = 0
mmap2(NULL, 12412, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f43000
mmap2(0xb7f45000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb7f45000
close(3) = 0
open("/lib/libm.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\3603\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=154476, ...}) = 0
mmap2(NULL, 147584, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f1e000
mmap2(0xb7f41000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22) = 0xb7f41000
close(3) = 0
open("/lib/libcrypt.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\10\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=22168, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f1d000
mmap2(NULL, 184636, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7eef000
mmap2(0xb7ef4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4) = 0xb7ef4000
mmap2(0xb7ef6000, 155964, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7ef6000
close(3) = 0
open("/lib/libutil.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\f\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=9992, ...}) = 0
mmap2(NULL, 12432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7eeb000
mmap2(0xb7eed000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb7eed000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200Y\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1234336, ...}) = 0
mmap2(NULL, 1201596, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7dc5000
mmap2(0xb7ee5000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x120) = 0xb7ee5000
mmap2(0xb7ee8000, 9660, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7ee8000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7dc4000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7dc48c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7ee5000, 4096, PROT_READ) = 0
mprotect(0xb7f70000, 4096, PROT_READ) = 0
mprotect(0xb7faf000, 4096, PROT_READ) = 0
munmap(0xb7f74000, 130952) = 0
set_tid_address(0xb7dc4908) = 31234
sendto(-1210300144, umovestr: Input/output error
0xc, 3086422004, MSG_EOR|MSG_DONTWAIT|MSG_CONFIRM|MSG_NOSIGNAL|0xb7dc0000, {sa_family=AF_DECnet, sa_data="\0\0\260B\0\0\r\0\0\0p\364\0\0"}, 3216923528) = 0
rt_sigaction(SIGRTMIN, {0xb7f618d0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb7f617e0, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
uname({sys="Linux", node="tronde", ...}) = 0
rt_sigaction(SIGFPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
brk(0) = 0x8140000
brk(0x8161000) = 0x8161000
getuid32() = 1000
geteuid32() = 1000
getgid32() = 100
getegid32() = 100
open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3
read(3, "\321\326\33\375", 4) = 4
close(3) = 0
time(NULL) = 1182805968
stat64("/usr/lib/perl5/vendor_perl/5.8.0", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.0/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.2", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.2/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.4", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.4/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.5", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.5/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.6", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.6/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/vendor_perl/5.8.7", {st_mode=S_IFDIR|0755, st_size=392, ...}) = 0
stat64("/usr/lib/perl5/vendor_perl/5.8.7/i686-linux", {st_mode=S_IFDIR|0755, st_size=248, ...}) = 0
stat64("/usr/lib/perl5/site_perl/5.8.0", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.0/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.2", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.2/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.4", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.4/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.5", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.5/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.6", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.6/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/perl5/site_perl/5.8.7", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
stat64("/usr/lib/perl5/site_perl/5.8.7/i686-linux", {st_mode=S_IFDIR|0755, st_size=96, ...}) = 0
stat64("/usr/local/lib/site_perl/5.8.8/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/local/lib/site_perl/5.8.8", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
stat64("/usr/local/lib/site_perl/i686-linux", 0xbfbe58c0) = -1 ENOENT (No such file or directory)
open("segfault.pl", O_RDONLY|O_LARGEFILE) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
readlink("/proc/self/exe", "/usr/bin/perl5.8.8", 4095) = 18
fstat64(3, {st_mode=S_IFREG|0644, st_size=107, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f93000
read(3, "my %hash = (foo => {});\nmy $ref "..., 4096) = 107
_llseek(3, 0, [107], SEEK_CUR) = 0
read(3, "", 4096) = 0
close(3) = 0
munmap(0xb7f93000, 4096) = 0
brk(0x8182000) = 0x8182000
brk(0x81a3000) = 0x81a3000
brk(0x81c4000) = 0x81c4000
brk(0x81e5000) = 0x81e5000
brk(0x8206000) = 0x8206000
brk(0x8227000) = 0x8227000
brk(0x8248000) = 0x8248000
brk(0x8269000) = 0x8269000
brk(0x828a000) = 0x828a000
brk(0x82ab000) = 0x82ab000
brk(0x82cc000) = 0x82cc000
brk(0x82ed000) = 0x82ed000
brk(0x830e000) = 0x830e000
brk(0x832f000) = 0x832f000
brk(0x8350000) = 0x8350000
brk(0x8371000) = 0x8371000
brk(0x8392000) = 0x8392000
brk(0x83b3000) = 0x83b3000
brk(0x83d4000) = 0x83d4000
brk(0x83f5000) = 0x83f5000
brk(0x8416000) = 0x8416000
brk(0x8437000) = 0x8437000
brk(0x8458000) = 0x8458000
brk(0x8479000) = 0x8479000
brk(0x849a000) = 0x849a000
brk(0x84bb000) = 0x84bb000
brk(0x84dc000) = 0x84dc000
brk(0x84fd000) = 0x84fd000
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Process 31234 detached


Eine Erhöhung der Anzahl (Hash-Tiefe) erhöht anscheinend die Anzahl der brk()-Aufrufe vorm SegFault.\n\n

<!--EDIT|Linuxer|1182807227-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
bloonix
 2007-06-26 04:50
#77783 #77783
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Sorry, hätte ich vielleicht etwas früher posten sollen...

Perlmonks:Segmentation faults
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-06-25 00:03.