{ "q1": { "type": "blank", "question": "\n

Given allocations.c, fill in the table below to identify how\nmuch memory (in bytes) is allocated in each memory segment (ie.\nstack, heap, data) for the corresponding variable\ndeclaration:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n
CodeDataHeapStack
double GD = 3.14;____ ( 1)____ ( 2)____ ( 3)
int a[] = {5, 7, 4};____ ( 4)____ ( 5)____ ( 6)
char *sp = \"Video Games\";____ ( 7)____ ( 8)____ ( 9)
char sa[] = \"Runescape\";____ (10)____ (11)____ (12)
Block b = {0};____ (13)____ (14)____ (15)
Point p0 = {0, 0};____ (16)____ (17)____ (18)
Point *p1 = NULL;____ (19)____ (20)____ (21)
Point *p2 = malloc(sizeof(Point));____ (22)____ (23)____ (24)
Point *p3 = malloc(5*sizeof(Point));____ (25)____ (26)____ (27)
Point **p4 = malloc(5*sizeof(Point *));____ (28)____ (29)____ (30)
\n\n

Assume this program is compiled on a 64-bit Linux machine (ie. the\nstudent machines).

\n" }, "q2": { "type": "multiple", "question": "\n

Build str_rev.c with the appropriate compiler flags and then\nrun it using gdb:

\n\n
\n$ gcc -Wall -g -std=gnu99 -o str_rev str_rev.c\n\n$ gdb ./str_rev\n...\n(gdb) run old school\n...\nProgram received signal SIGSEGV, Segmentation fault.\n(gdb) bt\n...\n
\n\n

Which of the following statements are true (select all that apply)?

\n", "responses": { "puts": "The program segfaults on the line puts(t).", "copy": "The program segfaults on the line *w++ = *r--.", "strcpy": "The program segfaults on the line strncpy(t, s, strlen(s)).", "strlen": "The program segfaults on the line char *t = malloc(strlen(s)).", "nulls": "The program segfaults because s is NULL.", "nullt": "The program segfaults because t is NULL.", "longs": "The program segfaults because s is too long.", "longt": "The program segfaults because t is too long.", "frees": "To fix the segfault, we must call free(s).", "freet": "To fix the segfault, we must call free(t).", "inti": "To fix the segfault, we must set int i = 0 in the for loop.", "argc": "To fix the segfault, we must check i < argc in the for loop." } }, "q3": { "type": "multiple", "question": "\n

Fix the segmentation fault in Q2, rebuild the program, and then\nuse valgrind to run the program:

\n\n
\n$ valgrind --leak-check=full ./str_rev old school\n
\n\n

Which of the following statements are true (select all that apply)?

\n", "responses": { "nouninits": "There are no uninitialized memory accesses.", "uninits": "There are uninitialized memory accesses.", "noleaks": "There are no memory leaks.", "leaks": "There is a memory leak.", "noinvalids": "There are no invalid memory accesses.", "invalids": "There are invalid memory accesses." } }, "q4": { "type": "blank", "question": "\n

Assuming an 8 bit representation, complete the following table\nby converting the numbers in each row into their equivalent decimal,\nbinary, and hexadecimal representations.\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DecimalBinaryHexadecimal
25____ (1)____ (2)
____ (3)01100011____ (4)
____ (5)____ (6)0x78
\n" } }