Π ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠΈ, X/Open ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΎΡ
assert
, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
<b>#include <assert.h></b>
<b>void assert(int expression)</b>
ΠΠ°ΠΊΡΠΎΡ
assert
Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ, Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ
abort
Π΄Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» assert.h ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΎΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ»Π°Π³Π°
NDEBUG
. ΠΡΠ»ΠΈ
NDEBUG
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°,
assert
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΠΊΠ°ΠΊ Π½ΠΈΡΡΠΎ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°Π΄Π°Π½Π½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
-DNDEBUG
ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²ΠΈΠ² ΠΏΠ΅ΡΠ΅Π΄ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° assert.h ΡΡΡΠΎΠΊΡ
#define NDEBUG
Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅
assert
Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Π² Π²Π°ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠΎΠ³Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²ΡΠ°ΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ
assert
Π½Π΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ β Π²ΡΡΠ΄ Π»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
assert failed
ΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡΡ ΠΌΠΎΠΆΠ΅Ρ, Π»ΡΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠ΅Π΅ΡΡ Π² ΠΌΠ°ΠΊΡΠΎΡΠ΅, Π½ΠΎ Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ°
assert
Π½Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΠ΅ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΡΡΠΎΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ Π½Π΅ ΠΏΡΠΎΡΠ²ΠΈΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ
assert
.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.2.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.2. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° assert.c.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° assert.c, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½Π° Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ°
assert
.
ΠΠΎΡΠ»Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° assert.h ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ "ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ", ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ΅ΠΉ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
main
.
#include <stdio.h>
#include <math.h>
#include <assert.h>
#include <stdlib.h>
double my_sqrt(double x) {
Β assert(x >= 0.0);
Β return sqrt(x);
}
int main() {
Β printf("sqrtΒ +2 = %g\n", my_sqrt(2.0));
Β printf("sqrtΒ -2 = %g\n",Β my_sqrt(-2.0));
Β exit(0);
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΠΊΡΠΎΡΠ΅
assert
ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’ΠΎΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ° assert Π² ΡΠ°Π·Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
ΡΠ°Π·Π½ΡΠΉ.
$ <b>ΡΡ -ΠΎ assert assert.Ρ -lm</b>
$ <b>./assert</b>
sqrt +2 = 1.41421
assert: assert.c:7: my_sqrt: Assertion 'x >= 0.0' failed.
Aborted
$
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
my_sqrt
Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ, ΠΌΠ°ΠΊΡΠΎΡ
assert
Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΡΡΠ΅Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈ ΡΠ°ΠΌΠΎ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ
abort
. ΠΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π°
abort
ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ
assert
.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
-DNDEBUG
, ΠΌΠ°ΠΊΡΠΎΡ
assert
Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅
NaN
(Not a Number, Π½Π΅ ΡΠΈΡΠ»ΠΎ) β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π° Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ
sqrt
ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ
my_sqrt
.
$ <b>cc -ΠΎ assert -DNDEBUG assert.Ρ -lm</b>
$ <b>./assert</b>
sqrt +2 = 1.41421
sqrt -2 = nan
$
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ "Floating point exception" ("ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ") Π²ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° NaN.
Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ β Π±ΠΎΠ³Π°ΡΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΄Π½ΠΎ Π²ΡΡΠ²ΠΈΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
malloc
ΠΈ
free
Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π²Π°ΠΆΠ½ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΠ΅, ΠΈ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ»ΠΈ.
ΠΠ±ΡΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
malloc
ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΈ Π½Π΅Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ
Π½Π° Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ. ΠΡΠΎ ΡΡΠ΅ΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠ΅ΡΡΠ΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΠ½ΠΈΠ·ΠΈΡΡΡ, ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΉΠ΄Π΅Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ Π² ΠΎΠ±Π»Π°ΡΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ½ΡΠ° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ Π±Π»ΠΎΠΊΠ°), Π²Ρ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄ΠΎΠ»Π΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ malloc, ΡΠ»Π΅Π΄ΡΡΠ΅ΠΉ Π·Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠ·ΠΎΠ²
malloc
ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅
free
ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΠ±ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅Π³ΠΎ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠ΅ ΠΏΠΎΠΌΠΎΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΡΠΈΡ
Π΄Π²ΡΡ
ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΡ
Π²Π΅ΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ
malloc
ΠΈ
free
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΡΡΠ°ΡΡΡΡ ΡΡΠ΅ΡΡΡ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.