- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
int main(void)
{
int a=0,b=1000;
int * p;
p=malloc(sizeof(int)*b-7); // уменьшаем выделяемую память на 7 байт, а почему оно не падает?
for(;a<b;a++) p[a]=a;
printf("%lu",sizeof(int)*b);
free(p);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
int main(void)
{
int a=0,b=1000;
int * p;
p=malloc(sizeof(int)*b-7); // уменьшаем выделяемую память на 7 байт, а почему оно не падает?
for(;a<b;a++) p[a]=a;
printf("%lu",sizeof(int)*b);
free(p);
}
а если убрать 8 байт то уже падает,что-то где-то округляется что-ли?
guest 10.02.2015 10:50 # +2
The glibc malloc(3) always returns 8-byte aligned memory addresses,
so these functions are needed only if you require larger alignment
values.
pl7ofit 10.02.2015 10:55 # 0
bormand 10.02.2015 11:17 # +4
P.S. На самом деле, на стеке тоже всё округляется. Не только в куче. И в структурах между полями тоже досыпается мусор, чтобы они по правильно выровненным адресам ложились.
1024-- 10.02.2015 11:21 # 0
bormand 10.02.2015 11:29 # +1
pl7ofit 10.02.2015 11:53 # 0
1024-- 10.02.2015 12:00 # 0
bormand 10.02.2015 12:18 # 0
absolut 10.02.2015 11:25 # 0
bormand 10.02.2015 11:27 # +5
"Как можно писать на языке, в котором даже в сложении двух целых чисел таится UB?"
absolut 10.02.2015 11:36 # 0
сначала разочароваться в сишечке придется, а уж потом в крестах
bormand 10.02.2015 11:43 # 0
absolut 10.02.2015 12:20 # 0
miwomare 25.08.2021 07:30 # 0