Задать вопрос
@you_go_home

Почему массив malloc не наполняется?

#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <malloc.h>
#include <stdlib.h>
#define N 1000
int sort(int mas_otr, int n);

int main()

{
	setlocale(LC_ALL, "RUS"); 
    int i, n, *mas, *mas_otr;
    setlocale(0, "rus");
    printf("Введите размер массива: ");
    scanf("%d", &n);
    srand(time(0));
    mas = malloc(n * sizeof(int));
    mas_otr = malloc(n * sizeof(int));
    printf("Сгенерированный массив:\n");
    for (i = 0; i < n; i++) {
        mas[i] = rand() % 100;
        printf("%d ", mas[i]);
    }
    for (int b = 0; b < n; n++) {
        if (mas[b] < 0) { mas_otr[b] = mas[b]; printf("%d", mas_otr[b]); //НЕ ВЫВОДИТ МАССИВ
        }
    }
    sort(mas_otr,n);
    free(mas);
    free(mas_otr);
    return 0;

	getchar(); 

}

int sort(int mas_otr, int n) {
    int i, *j, tmp;
    for (i = 0; i < n; i++) { 
        for (j = 0; j < n - i - 1; j++) {
            if (mas_otr[j] > mas_otr[j + 1]) {
                 tmp = mas_otr[j];
                 mas_otr[j] = mas_otr[j + 1];
                 mas_otr[j + 1] = tmp;
            }
        }
    }
    puts("Массив с отрицательными значениями");
    for (int *c = 0; c < n; c++) {
        printf("%d", mas_otr[c]); //НЕ ВЫВОДИТ МАССИВ
    }
}
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
1.rand() генерирует только положительные числа: https://en.cppreference.com/w/c/numeric/random/rand
2.Даже если бы с п.1 было бы все нормально, то после того как выделена память для mas_otr ее нужно обнулить, т.к. malloc никакой инициализации памяти не производит и там будет содержаться мусор. А вы заполняете mas_otr только выборочно. Так что итоговый результат очевидно то же будет не тем, что вы ожидаете.
3.нужно в правильных местах в вывести переносы строк, а то сейчас у вас все будет лепиться в одну строку.
4.В sort() вместо массива вы передаете целое число.
Ответ написан
Ваш ответ на вопрос

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

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