Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 119

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

(gdb) list

18 /* 18 */  int s = 1;

19 /* 19 */

20 /* 20 */  for(; i < n && s != 0; i++) {

21 /* 21 */   s = 0;

22 /* 22 */   for(j = 0; j < n; j++) {

23 /* 23 */    if(a[j].key > a[j+1].key) {

24 /* 24 */    item t = a[j];

25 /* 25 */    a[j] = a[j+1];

26 /* 26 */    a[j+1] = t;

27 /* 27 */    s++;

(gdb)

Π’ строкС 22 Π·Π°Π΄Π°Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° пСрСмСнная j мСньшС n. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС n Ρ€Π°Π²Π½Π° 5, поэтому Ρƒ j Π±ΡƒΠ΄Π΅Ρ‚ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4, слишком большоС. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ Π°[4] с Π°[5] ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈΡ… пСрСстановкС. ЕдинствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: j < n-1.

Π”Π°Π²Π°ΠΉΡ‚Π΅ внСсСм это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ debug4.c, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

/* 22 */   for(j = 0; j < n-1; j++) {

$ cc -g -o debug4 debug4.с

$ ./debug4

array[0] = {john, 2}

array[1] = {alex, 1}

array[2] = {bill, 3}

array[3] = {neil, 4}

array[4] = {rick, 5}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° всС Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π²Ρ‹Π²Π΅Π»Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎ отсортированный список. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ gdb для пошагового выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Установка Ρ‚ΠΎΡ‡Π΅ΠΊ останова

Для обнаруТСния мСста сбоя Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΎ врСмя выполнСния. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΡ‡Π΅ΠΊ останова. Они ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ. Π’Ρ‹ смоТСтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sort Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ†ΠΈΠΊΠ»Π°. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π° i выполняСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» мСняСт мСстами элСмСнт с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ, располоТСнным Π½ΠΈΠΆΠ΅ Π² спискС. Π­Ρ‚ΠΎ создаСт эффСкт всплытия ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ², поднимая Π²Π²Π΅Ρ€Ρ… мСньшиС элСмСнты. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ выполнСния внСшнСго Ρ†ΠΈΠΊΠ»Π° самый большой элСмСнт опускаСтся Π½Π° Π΄Π½ΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, остановив ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° внСшнСм Ρ†ΠΈΠΊΠ»Π΅ ΠΈ просмотрСв состояниС массива.

Для установки Ρ‚ΠΎΡ‡Π΅ΠΊ останова примСняСтся ряд ΠΊΠΎΠΌΠ°Π½Π΄. Π˜Ρ… ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ gdb с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ help breakpoint:

(gdb) help breakpoint

Making program stop at certain points.


List of commands:

awatch -- Set a watchpoint for an expression

break -- Set breakpoint at specified line or function

catch -- Set catchpoints to catch events

clear -- Clear breakpoint at specified line or function

commands -- Set commands to be executed when a breakpoint is hit

condition -- Specify breakpoint number N to break only if COND is true

delete -- Delete some breakpoints or auto-display expressions

delete breakpoints -- Delete some breakpoints or auto-display expressions

delete checkpoint -- Delete a fork/checkpoint (experimental)

delete mem -- Delete memory region

delete tracepoints -- Delete specified tracepoints

disable -- Disable some breakpoints

disable breakpoints -- Disable some breakpoints

disable display -- Disable some expressions to be displayed when program stops

disable mem -- Disable memory region

disable tracepoints -- Disable specified tracepoints

enable -- Enable some breakpoints

enable delete -- Enable breakpoints and delete when hit

enable display -- Enable some expressions to be displayed when program stops

enable mem -- Enable memory region

enable once -- Enable breakpoints for one hit

enable tracepoints -- Enable specified tracepoints

hbreak -- Set a hardware assisted breakpoint

ignore -- Set ignore-count of breakpoint number N to COUNT

rbreak -- Set a breakpoint for all functions matching REGEXP

rwatch -- Set a read watchpoint for an expression

tbreak -- Set a temporary breakpoint

tcatch -- Set temporary catchpoints to catch events

thbreak -- Set a temporary hardware assisted breakpoint

watch -- Set a watchpoint for an expression


Type "help" followed by command name for full documentation.

Type "apropos word" to search for commands related to "word".

Command name abbreviations are allowed if unambiguous.

УстановитС Ρ‚ΠΎΡ‡ΠΊΡƒ останова Π² строкС 21 ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

$ gdb debug4

(gdb) break 21

Breakpoint 1 at 0x8048427: file debug4.c, line 21.

(gdb) run

Starting program: /home/neil/BLP4e/chapter10/debug4


Breakpoint 1, sort (a=0x804a040, n=5) at debug4.c:21

21 /* 21 */    s = 0;

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива ΠΈ Π·Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cont Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ натолкнСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ останова, Π² нашСм случаС это снова строка 21. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ нСсколько Ρ‚ΠΎΡ‡Π΅ΠΊ останова:

(gdb) print array[0]

$1 = (data = "bill", '\0' <repeats 4091 times>, key = 3)

Для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ @<число>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ gdb вывСсти ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство элСмСнтов массива. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти всС ΠΏΡΡ‚ΡŒ элСмСнтов, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

(gdb) print array[0]@5

$2 = {{data = "bill", '\0' <repeats 4091 times>, key = 3}, {

    data = "neil", '\0' <repeats 4091 times>, key =4}, {

    data = "john", '\0' <repeats 4091 times>, key =2}, {

    data = "rick", '\0' <repeats 4091 times>, key =5}, {

    data = "alex", '\0' <repeats 4091 times>, key = 1}}

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ‡ΠΈΡ‰Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π»Π΅Π³Ρ‡Π΅ Π±Ρ‹Π»ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ Ρ†ΠΈΠΊΠ»Π°, массив Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Когда Π²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ пСрСстройки массива array, происходящиС ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

(gdb) cont

Continuing.


Breakpoint 1, sort (a=0x8049580, n=4) at debug4.c:21

21 /* 21 */   s = 0;

(gdb) print array[0]@5

$3 = {{data = "bill", '\0' <repeats 4091 times>, key = 3}, {

    data = "john", '\0' <repeats 4091 times>, key =2}, {

    data = "neil", '\0' <repeats 4091 times>, key = 4}, {

    data = "alex", '\0' <repeats 4091 times>, key =1}, {

    data = "rick", '\0' <repeats 4091 times>, key =5}}

(gdb)

МоТно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ display, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π² gdb автоматичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ массива ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ остановкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ останова:

(gdb) display array[0]@5

1: array[0]@5 = {{data = "bill", '\0' <repeats 4091 times>, key = 3}, {

    data = "john", '\0' <repeats 4091 times>, key = 2}, {

    data = "neil", '\0' <repeats 4091 times>, key = 4}, {

    data = "alex", '\0' <repeats 4091 times>, key = 1}, {

    data = "rick", '\0' <repeats 4091 times>, key, = 5}}

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вмСсто остановки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ½Π° просто ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ запросили, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Для этого ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ commands. Она ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ останова. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ лишь Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ останова для продолТСния выполнСния:

(gdb) commands

Type commands for when breakpoint 1 is hit, one per line.

End with a line saying just "end".

> cont

> end

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° продолТаСтся Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, выводя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° оказываСтся Π²Π±Π»ΠΈΠ·ΠΈ внСшнСго Ρ†ΠΈΠΊΠ»Π°.

(gdb) cont

Continuing.


Breakpoint 1, sort (a=0x8049684, n=3) at debug4.c:21

21 /* 21 */    s = 0;

1: array[0]@5 = {{data = "john", '\000' <repeats 4091 times>, key = 2}, {

    data = "bill", '\000' <repeats 4091 times>, key =3}, {

    data = "alex", '\000' <repeats 4091 times>, key =1}, {

    data = "neil", '\000' <repeats 4091 times>, key =4}, {

    data = "rick", '\000' <repeats 4091 times>, key = 5}}


array[0] = {john, 2}

array[1] = {alex, 1}

array[2] = {bill, 3}

array[3] = {neil, 4}

array[4] = {rick, 5}

Program exited with code 025.

(gdb)

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb сообщаСт ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сама Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ exit ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main. Код Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ exit.

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ выполняСт внСшний Ρ†ΠΈΠΊΠ» ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько оТидалось. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° n, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² условии Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π°, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ достиТСнии Ρ‚ΠΎΡ‡ΠΊΠΈ останова. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½ΡƒΠΆΠ½ΠΎΠ΅ число Ρ€Π°Π·. Π”Π΅Π»ΠΎ Π² ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ n Π² строкС 30.

/* 30 */   n--;

Π­Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° внСшнСго Ρ†ΠΈΠΊΠ»Π° наибольший, элСмСнт array окаТСтся Π²Π½ΠΈΠ·Ρƒ ΠΈ поэтому остаСтся мСньшС элСмСнтов для сортировки. Но ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, это ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ ΠΈ создаСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ исправлСния (хотя Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅) β€” ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ строку. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ, устранило Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ исправлСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Вставка исправлСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°