Allepta
@Allepta

Почему рандомные элементы массива заполняются мусором?

Привет. Пробую создать двумерный динамический массив:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  unsigned long arr_len = 8;
  char **array;
  char *testword = "TEST";

  array = malloc(arr_len);

  for(unsigned long step = 0; step <= arr_len; step++)
  {
    array[step] = malloc((unsigned long)strlen(testword) + 1);
    strcpy(array[step], testword);
  }

  for(unsigned long step = 0; step <= arr_len; step++)
    printf("-> array[%ld]: %s\n", step, array[step]);

  return 0;
}


Указываю количество элементов в массиве и выделяю память для каждого элемента массива, но при проверке элементов некоторые из них заполнены мусором. Если память выделять через calloc, то все норм. Почему именно в этом примере ошибка?
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
char **array;
array = malloc(arr_len);

for(unsigned long step = 0; step <= arr_len; step++)
{
    array[step] =

Потому что в этом коде две большие ошибки. Первая: памяти для массива указателей из arr_len элементов требуется не arr_len, а arr_len * sizeof(char *). Вторая: цикл выполняет не arr_len, а arr_len + 1 итерацию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
array = (char**) malloc(arr_len * sizeof(char*));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы