Получение ошибки при освобождении выделенного указателя - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть упражнения, которые я определяю 2 строки и некоторые цифры (место в строке), что мне нужно скопировать вторую строку в первую, но из N места (пример: "Привет" "Мир«3 будет« HeWorldllo »).

Функции:

char* Dynamic_allocation() {
  char *string = (char*)malloc(sizeof(char));
  char ch = '\0';
  int i = 1;
  while (ch != '\n') {
    scanf("%c", &ch);
    string[i - 1] = ch;
    i++;
    string = (char*)realloc(string, i * sizeof(char));
  }
  string[i - 2] = '\0';
  return string;
}


void Copy_string(char* str) {
  char *str2, *tmp;
  int N, Bytes = 0;
  tmp = str;
  printf("Enter one more string \n");
  str2 = Dynamic_allocation();
  printf("Enter from which place you would like to start copying \n");
  scanf("%d", &N);
  str = (char*)realloc(str, (strlen(str) + strlen(str2) + 1) * sizeof(char));
  tmp = &str[N-1];
  while (*tmp) {
    Bytes++;
    tmp++;
  }
  memmove(&str[N-1+strlen(str2)], &str[N - 1], (Bytes+1) * sizeof(char));
  for (int i = 0; i < strlen(str2); i++) {
    str[N - 1 + i] = str2[i];
  }
  printf("%s \n", str);
  free(str2);
}

Main:

int main() {
  char *string;
  printf("Enter a string and press ENTER \n");
  string = Dynamic_allocation();
  Copy_string(string);
  free(string);
  return 0;
}

Когда я введу« abc »« 123 »и 2 дляпример все работает нормально, но когда я ввожу "ab", "12" и 2, результат печатается нормально, но я получаю сообщение об ошибке при освобождении первой строки в главном (_CrtIsValidHeapPointer (block)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...