Кажется, вы выделяете слишком мало места для ваших "строк", если вам нужен массив строк, который вам нужно будет сначала
выделить массив, затем выделить для каждой строки в массиве
String** string = malloc((sizeof (String*)) * NumElements); // notice the extra *
Теперь для каждой строки в «строке» вам нужно выделить место, которое может содержать всю строку, которую вы хотите сохранить:
string[0] = malloc( strlen( "Hello, " ) + 1 ) // (including trailing \0)
strcpy( string[0], "Hello, " );
Не уверен, что вы делаете в String_Set хотя, может быть, вы делаете это