это ошибка сегментации?Программа зависает.(С) - PullRequest
0 голосов
/ 27 ноября 2011

когда я запускаю это, он печатает правильные вещи, но затем зависает?Это ошибка сегментации?

int main(int argc, char** argv) {
  int NumElements = 2; /* the number of elements in the string array */
  String* string = (String*) malloc((sizeof (String*)) * NumElements); /* allocate some memory for the app to use */
  unsigned int BytesReserved = ((sizeof (String*)) * NumElements); /* the amount of bytes reserved */

  /* debug */
  printf("Number of elements: %d\nAmount of bytes reserved: %u\n", NumElements, BytesReserved);
  string[0] = String_Set("Hello, ");
  string[1] = String_Set("world!");

  /* loop through the array of strings and print each one */
  int i;
  for (i = 0; i < NumElements; i++) {
    printf("%s\n", String_CString(string[i]));
  }

  free(string); /* deallocate the allocated memory we used earlier */
  return 0;
}

1 Ответ

1 голос
/ 27 ноября 2011

Кажется, вы выделяете слишком мало места для ваших "строк", если вам нужен массив строк, который вам нужно будет сначала выделить массив, затем выделить для каждой строки в массиве

String** string = malloc((sizeof (String*)) * NumElements);  // notice the extra *

Теперь для каждой строки в «строке» вам нужно выделить место, которое может содержать всю строку, которую вы хотите сохранить:

string[0] = malloc( strlen( "Hello, " ) + 1 ) // (including trailing \0)
strcpy( string[0], "Hello, " );

Не уверен, что вы делаете в String_Set хотя, может быть, вы делаете это

...