0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 1
1

Только realloc

19.08.2018, 22:45. Показов 1064. Ответов 1

Не хочет работать программа(возвращает неправильные числа+проблема с выводом)

Во вложении скрин с условием!!!
 Комментарий модератора 
Перепишите задание на форум


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    char *ram, *in;
    int p = 50;
 
    printf("Podaj tekst: ");
 
    ram =(char *)realloc(NULL, p*sizeof(char));
 
    if (ram == NULL)
    {
        printf("\nFailed to allocate memory");
 
        return 1;
    }
 
    in = (char *)realloc(NULL, 1010*sizeof(char));
    if (in == NULL)
    {
        printf("\nFailed to allocate memory");
 
        free(ram);
        return 1;
    }
 
 
    scanf("%[^\n]s", in);
 
    while (strlen(in) > (unsigned int)p)
    {
        p += 50;
        ram = (char *)realloc(ram, p*sizeof(char));
 
        if (ram == NULL)
     {
        printf("Failed to allocate memory");
 
        free(ram);
        free(in);
        return 1;
     }
    }
    ram = in;
 
    printf("%s", ram);
 
    free(ram);
    free(in);
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2018, 22:45
Ответы с готовыми решениями:

Realloc
Программа должна забивать массив command_comblock символами 'p', но она почему-то не выполняет...

Realloc в функции
Есть функция void read_line(char *adress) { char temp = '1'; unsigned long long int...

Использование realloc
Доброго времени суток. Определен динамический массив, он вводится. Затем нужно увеличить размер...

Проблема с realloc
22 строчка выделение памяти через realloc, 3 первых прокрутки цикла работают, а дальше все...

1
1850 / 1073 / 681
Регистрация: 25.04.2016
Сообщений: 3,020
20.08.2018, 00:36 2
вне зависимости от задания, код составлен крайне неоптимально.

Зачем сначала объявлять массив ram[50], а затем делать
while (strlen(in) > (unsigned int)p)
?

Когда мы можем сразу сделать
C
1
2
3
4
5
6
7
int p = strlen(in);
if ((ram = (char *)malloc(p*sizeof(int))) == NULL)
{
    printf("\nFailed to allocate memory\n");
    free(in);
    return -1;
}
??

Ну, в вашем случае тут realloc, но не суть, смысл тот же.

Далее, когда вы делаете ram = in; вы просто записываете в ram адрес памяти, по которому хранится in, т.е. в этом случае во-первых, теряется вся память, которая была запрошена под ram, т.е. больше нет указателя, который бы на нее указывал, а во-вторых (что следует из первых), делать realloc для ram вообще нет никакого смысла, достаточно сделать:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    char *ram, *in = NULL;
    if ((in = (char *)malloc(1010*sizeof(int))) == NULL)
    {
        printf("\nFailed to allocate memory\n");
        return -1;
    }
 
    printf("Podaj tekst: ");
    scanf("%1010[^\n]s", in);
 
    ram = in;
 
    printf("symbols in in[]:\n\t%s\n", in);
    printf("symbols in ram[]:\n\t%s\n", ram);
 
    ram = NULL;
    free(in);
    return 0;
}
вы бы тогда уж memcpy использовали что ли.

Просто для примера, посмотрите на код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main (void)
{
    char *ram, *in;
    if ((in = (char *)malloc(1010*sizeof(int))) == NULL)
    {
        printf("\nFailed to allocate memory\n");
        return -1;
    }
 
    printf("Podaj tekst: ");
    scanf("%1010[^\n]s", in);
 
    int p = strlen(in);
    if ((ram = (char *)malloc(p*sizeof(int))) == NULL)
    {
        printf("\nFailed to allocate memory\n");
        free(in);
        return -1;
    }
 
    int i;
    for (i=0; i<1010 && in[i] != '\0'; i++)
        ram[i] = in[i];
    ram[i] = '\0';
 
    printf("symbols in in[]:\n\t%s\n", in);
    printf("symbols in ram[]:\n\t%s\n", ram);
 
    free(in);
    free(ram);
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2018, 00:36
Помогаю со студенческими работами здесь

Функция realloc
Есть такой фрагмент кода: /* поиск отрицательных элементов и их размещение в конце массива*/ ...

Realloc и malloc
Здравствуйте. У меня такой вопрос: возможно в Си нечто вроде конфликта между realloc() и...

Перераспределение памяти, realloc
Есть код, который считывает из файла слова и записывает их в динамическую записную книжку. Всё...

Realloc(): invalid pointer
void str_cat(char** str,const char* s){ int LenStr = 0; if(*str != NULL){ LenStr =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru