Скажу честно, я полный новичок в c. Таким образом, такие вещи, как malloc и realloc, являются чуждыми понятиями. Я думаю, что у меня есть основы, но я просто не могу понять это на 100%.
while (int args = scanf("%s", string)) {
if (args < 0) break;
count++;
if (array == NULL) {
array = (char *) malloc(strlen(string));
if (array == NULL) {
printf("Error allocating memory");
exit(1);
}
} else {
printf("%s %d\n", string, strlen(string));
array = (char *) realloc(array, (sizeof(array) + strlen(string) + 1));
if (array == NULL) {
printf("Error allocating memory");
free(array);
exit(1);
}
printf("%lu\n", sizeof(array));
}
strcpy(&array[count - 1], string);
}
Чтение из терминала - файл cat | ./program и представляет собой просто набор слов произвольной длины. Я пытаюсь собрать их всех в массив (массив).
Редактировать: я должен упомянуть, что я, по-видимому, пытаюсь получить доступ к памяти, которую я не выделил: malloc: *** error for object 0x7fe9e04039a0: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Segmentation fault: 11
while (int args = scanf("%s", string))
действительно ли это компилируется в вашей системе? - person ouah   schedule 25.09.2013string
иarray
поможет... это (array = (char *) malloc(strlen(string));
), вероятно, неверно; скорее всего, это должен бытьarray = malloc(sizeof(*array));
, что избавляет меня от необходимости знать типarray
и все же дает правильный ответ. Если вы действительно выделяетеchar *
, то вам почти наверняка понадобитсяstrlen(string)+1
, чтобы разрешить нулевой завершающий байт. Ваш код не выглядит полностью последовательным. Если вам нужен массив строк, вам нужен как массив указателей на символы, так и указатели на каждую строку:char **array = 0;
но… - person Jonathan Leffler   schedule 25.09.2013