/*
* Copyright ©2026 Soham Pardeshi. All rights reserved.
* Permission is hereby granted to students registered for University of
* Washington CSE 333 for use solely during Summer Quarter 2026 for
* purposes of the course. No other use, copying, distribution, or
* modification is permitted without prior written consent. Copyrights
* for third-party components of this work must be honored. Instructors
* interested in reusing these course materials should contact the author.
*/
/* Buggy code for CSE 333 Section 2
* 1. Draw a memory diagram for the execution to identify errors.
* 2. Use gdb and valgrind to identify sources of runtime, logical,
* and memory errors.
* 3. Clean up the code style.
*/
#include <string.h> // strncpy, strlen
#include <stdio.h> // printf
#include <stdlib.h> // malloc, EXIT_SUCCESS, NULL
// A SimpleString stores a C-string and its current length
typedef struct simplestring_st {
char* word;
int length;
} SimpleString;
// Allocate a new SimpleString on the heap initialized with word
// and return pointer to the new SimpleString in dest
void InitWord(char* word, SimpleString* dest);
int main(int argc, char* argv[]) {
char comp[] = "computer";
SimpleString ss = {comp, strlen(comp)};
SimpleString* ss_ptr = &ss;
// expecting "1. computer, 8"
printf("1. %s, %d\n", ss_ptr->word, ss_ptr->length);
char cse[] = "cse333";
InitWord(cse, ss_ptr);
// expecting "2. cse333, 6"
printf("2. %s, %d\n", ss_ptr->word, ss_ptr->length);
return EXIT_SUCCESS;
}
void InitWord(char* word, SimpleString* dest) {
dest = (SimpleString*) malloc(sizeof(SimpleString));
dest->length = strlen(word);
dest->word = (char*) malloc(sizeof(char) * (dest->length + 1));
strncpy(dest->word, word, dest->length + 1);
}