Malloc, указатели строк и Valgrind

Что бы это ни стоило, на KitKat + кажется, что adapter.notifyDataSetChanged() достаточно, чтобы вызвать появление новых представлений, при условии, что вы setOffscreenPageLimit достаточно высоко. Я могу получить желаемое поведение, выполнив viewPager.setOffscreenPageLimit(2).

5
задан Charlie Epps 15 July 2009 в 04:45
поделиться

5 ответов

 char *seq=(char *)malloc((strlen(first)+1)*sizeof(char));

Вы выделяете память для строки размером только "первая".

  strcat(strcpy(seq,first),second);

А затем вы пытаетесь уместить в ней и первую, и вторую строку. Это никогда не сработает. strcat не создает дополнительной памяти, вам необходимо включить ее в malloc .

Нет необходимости приводить результат malloc в чистый C.

Также нет необходимости делать sizeof (char) , так как это гарантированно будет 1. Некоторым нравится, чтобы он был там в любом случае, чтобы указать тип в случае его изменения, некоторые считают это беспорядком.

17
ответ дан 18 December 2019 в 07:10
поделиться

Вы выделяете достаточно места только для первого в последовательности

2
ответ дан 18 December 2019 в 07:10
поделиться

seq имеет длину только (strlen (first) +1) * sizeof (char), этого недостаточно для хранения объединенной строки first + second.

1
ответ дан 18 December 2019 в 07:10
поделиться

Я видел, что строка:

strcat (strcpy (seq, first), second);

не неправильно оформлена. Причина в том, что вы выполняете конкатенацию строк, в которой вы не указываете правильный источник. Он будет работать нормально, если вы разделите приведенный выше синтаксис на 2 строки.

strcpy (seq, first); strcat (seq, second);

Это потому, что когда вы выполняете копирование строки, она копирует строку из «first» в «seq». Теперь, что касается конкатенации строк, поскольку он не смог найти правильный источник [помните, что вы специально не упомянули, что источником является "seq"], это дает недопустимую проблему с утечкой памяти при записи.

Надеюсь, это проясняет ваш вопрос. Вернитесь, если потребуется дополнительная информация для того же.

-1
ответ дан 18 December 2019 в 07:10
поделиться

Где соответствующий free () для malloc () ?

3
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: