2014-02-04 5 views
3

Хотелось бы узнать, не видел ли кто-нибудь уже sbrk (0)?может sbrk (0) терпеть неудачу?

Я имею в виду, что если вы можете достичь этой функции, у вас, очевидно, были права доступа к памяти раньше, поэтому проверить текущее местоположение перерыва должно быть хорошо, правильно?

EDIT: Должен ли я рассматривать, например, ошибку?

+1

Я полагаю, это не помогло вам? –

+0

То, как я его использую, никогда не приводило меня к ошибке. – user3210859

+2

Что смешно, так это то, что в соответствии с свободной формулировкой документации, это может быть неудачно. Это, конечно, полная глупость. – Damon

ответ

3

В documents говорится, что:

sbrk() increments the program's data space by increment bytes. 
    Calling sbrk() with an increment of 0 can be used to find the current 
    location of the program break. 

    ... 

    On success, sbrk() returns the previous program break. (If the break 
    was increased, then this value is a pointer to the start of the newly 
    allocated memory). On error, (void *) -1 is returned, and errno is 
    set to ENOMEM. 

Если вы посмотрите на glibc реализации вы увидите:

extern void *__curbrk; 
    ... 
void * 
__sbrk (intptr_t increment) 
{ 
    ... 
    if (increment == 0) 
    return __curbrk; 
    ... 

нет никакого способа это не получится, так как он просто возвращает текущее значение __curbrk если increment равен нулю.

+0

Вы очень благодарны, наконец, получили его. Посмотрел на http://fossies.org/dox/glibc-2.18/sysdeps_2mach_2hurd_2brk_8c_source.html тоже :) – user3210859

Смежные вопросы