Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

There are two program below, please describe all the bugs you found and how you fixed them. Step 1: Follow the Demo To use GDB,

There are two program below, please describe all the bugs you found and how you fixed them.

Step 1: Follow the Demo

To use GDB, you need to compile your program with a debugging (-g) flag gcc --std=c99 -g [some_program.c] -o [exe_name]

Then, run gdb with the executable:

gdb ./[exe_name] 

Step 2: Use GDB to resolve the segmentation fault

Try to use GDB to debug the program buggy-list-sort.c. The program in buggy- list-sort.c specifically generates a short linked list containing random integers and

tries to sort it using bubble sort. However, something in the code is broken, and the program crashes with a segmentation fault before the sorting is complete. If you were able to successfully debug the program, make sure to describe all of the bugs you found and how you fixed them in list_sort.txt.

(3 pts) Step 3: Use GDB to resolve the logic error

Try to use GDB to debug the program buggy-array-sort.c. This program generates a small array of random integers and tries to sort it using insertion

sort. However, something in the program is broken, and the array is not correctly sorted. If you were able to successfully debug the program, make sure to describe all of the bugs you found and how you fixed them in array_sort.txt.

Here is the buggy-list-sort.c

/*

* This program should sort a linked by increasing value using bubble sort,

* but it's currently broken. Use GDB and Valgrind to help debug it.

*/

#include

#include

/*

* This link structure is used below to implement a simple singly-linked list.

*/

struct link {

int val;

struct link* next;

};

/*

* This function swaps the values of two integers, using their memory addresses

* (i.e. using pointers to those integers).

*/

void swap(int* a, int* b) {

int tmp = *a;

*a = *b;

*b = tmp;

}

/*

* This function implements bubble sort:

*

* https://en.wikipedia.org/wiki/Bubble_sort

*

* Here, we specifically sort a linked list of integers by increasing value

* (i.e. the smallest value should be at the front of the array after it's

* sorted).

*/

void bubble_sort(struct link* head) {

int swapped = 0;

do {

swapped = 0;

struct link* curr = head;

while (curr != NULL) {

if (curr->val > curr->next->val) {

swap(&curr->val, &curr->next->val);

swapped = 1;

}

curr = curr->next;

}

} while (swapped);

}

int main(int argc, char const *argv[]) {

/*

* Generate a linkd list containing 16 random values between 0 and 100.

*/

struct link* head = NULL;

for (int i = 0; i < 16; i++) {

struct link* newlink = malloc(sizeof(struct link));

newlink->val = rand() % 100;

newlink->next = head;

head = newlink;

}

/*

* Print the entire list.

*/

printf("The unsorted list values are: ");

for (struct link* curr = head; curr != NULL; curr = curr->next) {

printf(" %d", curr->val);

}

printf(" ");

/*

* Sort the list, then print it again.

*/

printf("The sorted list values are: ");

bubble_sort(head);

for (struct link* curr = head; curr != NULL; curr = curr->next) {

printf(" %d", curr->val);

}

printf(" ");

return 0;

}

Here is the program buggy-array-sort.c

*

* This program should sort an array by decreasing value using insertion sort,

* but it's currently broken. Use GDB and Valgrind to help debug it.

*/

#include

#include

/*

* This function swaps the values of two integers, using their memory addresses

* (i.e. using pointers to those integers).

*/

void swap(int* a, int* b) {

int tmp = *a;

*a = *b;

*b = tmp;

}

/*

* This function implements insertion sort:

*

* https://en.wikipedia.org/wiki/Insertion_sort

*

* Here, we specifically sort an array of integers by decreasing value (i.e.

* the largest value should be at the front of the array after it's sorted).

*/

void insertion_sort(int* array, int n) {

for (int i = 1; i < n; i++) {

for (int j = i; j >= 0; j--) {

if (array[j-1] >= array[j]) {

break;

}

swap(&array[j-1], &array[j]);

}

}

}

int main(int argc, char const *argv[]) {

/*

* Generate an array containing 16 random values between 0 and 100.

*/

int n = 16;

int* array = malloc(n * sizeof(int));

for (int i = 0; i < n; i++) {

array[i] = rand() % 100;

}

/*

* Print the unsorted array.

*/

printf("The unsorted array values are: ");

for (int i = 0; i < n; i++) {

printf(" %d", array[i]);

}

printf(" ");

/*

* Sort the array and print it again.

*/

insertion_sort(array, n);

printf("The sorted array values are: ");

for (int i = 0; i < n; i++) {

printf(" %d", array[i]);

}

printf(" ");

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beginning Databases With PostgreSQL From Novice To Professional

Authors: Richard Stones, Neil Matthew

2nd Edition

1590594789, 978-1590594780

More Books

Students also viewed these Databases questions