Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 54

Запустить программу с проверками

25.04.2016, 22:06. Показов 1389. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно запустить программу с проверками (компиляция осуществляется с помощью команды: make pass)

Ошибки:
Code
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
56
57
58
59
60
61
dmitry@Dmitry-PC:~$ cd '/home/dmitry/Programming/lab_3_2_26' 
dmitry@Dmitry-PC:~/Programming/lab_3_2_26$ make pass
gcc -Wall -ansi --pedantic -g -o app main.c
main.c: In function ‘main’:
main.c:11:2: warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
  a = (int **)malloc(n * sizeof(int *));
  ^
main.c:11:14: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]
  a = (int **)malloc(n * sizeof(int *));
              ^
main.c:16:4: warning: implicit declaration of function ‘rand’ [-Wimplicit-function-declaration]
    a[i][j] = rand() % 2000 - 1000;
    ^
main.c:41:2: warning: implicit declaration of function ‘realloc’ [-Wimplicit-function-declaration]
  a = (int **)realloc(a, n * sizeof(int *));
  ^
main.c:41:14: warning: incompatible implicit declaration of built-in function ‘realloc’ [enabled by default]
  a = (int **)realloc(a, n * sizeof(int *));
              ^
main.c:66:3: warning: implicit declaration of function ‘free’ [-Wimplicit-function-declaration]
   free(a[i]);
   ^
main.c:66:3: warning: incompatible implicit declaration of built-in function ‘free’ [enabled by default]
indent --linux-style main.c
splint -f splintrc main.c
Splint 3.1.2 --- 03 May 2009
 
main.c: (in function main)
main.c:13:3: Index of possibly null pointer a: a
  A possibly null pointer is dereferenced.  Value is either the result of a
  function which may return null (in which case, code should check it is not
  null), or a global, parameter or structure field declared with the null
  qualifier. (Use -nullderef to inhibit warning)
   main.c:11:6: Storage a may become null
main.c:16:4: Index of possibly null pointer a: a
   main.c:11:6: Storage a may become null
main.c:16:4: Value a[] used before definition
  An rvalue is used that may not be initialized to a value on some execution
  path. (Use -usedef to inhibit warning)
main.c:18:8: Index of possibly null pointer a: a
   main.c:11:6: Storage a may become null
main.c:32:7: Variable r used before definition
main.c:32:10: Variable q used before definition
main.c:43:3: Index of possibly null pointer a: a
   main.c:41:6: Storage a may become null
main.c:43:25: Unqualified storage a[i] passed as only param:
                 realloc (a[i], ...)
  Unqualified storage is transferred in an inconsistent way. (Use
  -unqualifiedtrans to inhibit warning)
main.c:46:18: Index of possibly null pointer a: a
   main.c:41:6: Storage a may become null
main.c:55:18: Index of possibly null pointer a: a
   main.c:41:6: Storage a may become null
main.c:62:18: Index of possibly null pointer a: a
   main.c:41:6: Storage a may become null
main.c:66:8: Index of possibly null pointer a: a
   main.c:41:6: Storage a may become null
main.c:66:8: Unqualified storage a[i] passed as only param: free (a[i])
 
Finished checking --- 13 code warnings
make: *** [lint] Ошибка 1
Папка с программой содержит файлы:
  • main.c
  • makefile
  • splintrc

Содержимое в main.c

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <locale.h>
 
int main( /*@unused@ */ int argc, /*@unused@ */ char *argv[])
{
    int n, i, j, x, r, q, max;
    int **a = NULL;
    (char)setlocale(0, "RUS");
    printf("Введите n, где a[n][n]: ");
    (void)scanf("%d", &n);
    a = (int **)malloc(n * sizeof(int *));
    for (i = 0; i < n; i++)
        a[i] = (int *)malloc(n * sizeof(int *));
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            a[i][j] = rand() % 2000 - 1000;
    printf("Исходный массив: ");
    max = a[0][0];
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%6d", a[i][j]);
            if (a[i][j] > max) {
                max = a[i][j];
                r = i;
                q = j;
            }
        }
        printf("\n");
    }
    printf
        ("\nМаксимальный элемент массива a[%d][%d] = %d\n",
         r, q, max);
    for (i = r; i < n - 1; i++)
        a[i] = a[i + 1];
    for (i = 0; i < n - 1; i++) {
        for (j = q; j < n - 1; j++) {
            a[i][j] = a[i][j + 1];
        }
    }
    n--;
    a = (int **)realloc(a, n * sizeof(int *));
    for (i = 0; i < n; i++)
        a[i] = (int *)realloc(a[i], n * sizeof(int *));
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%6d", a[i][j]);
        }
        printf("\n");
    }
 
    printf
        ("Отображение массива относительно горизонтальной оси симметрии: ");
    for (i = 0, x = 1; i < n; i++, x++) {
        for (j = 0; j < n; j++)
            printf("%6d", a[n - x][j]);
        printf("\n");
    }
    printf
        ("Отображение массива относительно вертикальной оси симметрии: ");
    for (i = 0; i < n; i++, x++) {
        for (j = 0, x = 1; j < n; j++, x++)
            printf("%6d", a[i][n - x]);
        printf("\n");
    }
    for (i = 0; i < n; i++)
        free(a[i]);
    free(a);
    return 0;
}
Содержимое в makefile

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
APP := app
SRCS := main.c
all: $(SRCS)
    gcc -Wall -ansi --pedantic -g -o $(APP) $^
lint:
    splint -f splintrc $(SRCS)
 
indent:
    indent --linux-style $(SRCS)
 
valgrind:
    valgrind --leak-check=yes ./$(APP)
 
pass: all indent lint valgrind
 
clean:
    rm -f *.o
 
cleanall: clean
    rm -f $(APP)
Содержимое в splintrc

Code
1
2
+relaxtypes
+ignoresigns
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2016, 22:06
Ответы с готовыми решениями:

Как скомпилировать и запустить программу?
помогите тоже запустить... в примере написано нужно запускать $ ./server1 &amp; и выводит 1094 $ server waiting но у меня...

Запустить программу в терминале линукс
Подсчет контрольной суммы файла (суммы байт по модулю 256). Нить считывает участок файла и считает его сумму. Результаты складываются. ...

Запустить новую программу в порождённом процессе
easybudda, сможешь помочь? #include &lt;sys/types.h&gt; #include &lt;unistd.h&gt; #include &lt;stdio.h&gt; int main() { pid_t pid, ppid, chpid; ...

8
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 21:02
Цитата Сообщение от smert0406 Посмотреть сообщение
int **a = NULL;
не проще int *a[]?
Цитата Сообщение от smert0406 Посмотреть сообщение
(char)setlocale(0, "RUS");
(char) зачем?
setlocal(LC_ALL,"...");
Цитата Сообщение от smert0406 Посмотреть сообщение
(void)scanf("%d", &n)
если вы массив динамически выделяете, а размер получаете от пользователя, то можно все вообще проще сделать
Цитата Сообщение от smert0406 Посмотреть сообщение
a = (int **)malloc(n * sizeof(int *));
заменить на
int *a[][] = (int*)malloc(n*n*sizeof(int));
*a[i][j] - элемент
либо объявить а как int *a[], тогда обратиться можно как *a[i][j] тоже самое...
и тд
ошибка у вас одна. остальные предупреждения.
используйте под линкус отладчик gdb и компилируйте с ключем -g (компилятор сохраняет имена переменных)

(void) зачем?

(
Цитата Сообщение от smert0406 Посмотреть сообщение
a = (int **)malloc(n * sizeof(int *));
int **a[] = ()
0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 54
07.05.2016, 19:24  [ТС]
А как ликвидировать утечки в памяти:

Вот предупреждение:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
==4165== HEAP SUMMARY:
==4165==     in use at exit: 24 bytes in 1 blocks
==4165==   total heap usage: 17 allocs, 16 frees, 5,634 bytes allocated
==4165== 
==4165== 24 bytes in 1 blocks are definitely lost in loss record 1 of 1
==4165==    at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4165==    by 0x400889: main (main.c:18)
==4165== 
==4165== LEAK SUMMARY:
==4165==    definitely lost: 24 bytes in 1 blocks
==4165==    indirectly lost: 0 bytes in 0 blocks
==4165==      possibly lost: 0 bytes in 0 blocks
==4165==    still reachable: 0 bytes in 0 blocks
==4165==         suppressed: 0 bytes in 0 blocks
==4165== 
==4165== For counts of detected and suppressed errors, rerun with: -v
==4165== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Сам код:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
int main( /*@unused@ */ int argc, /*@unused@ */ char *argv[])
{
    int n, i, j, x, r, q, max;
    int **a = NULL;
    (void)setlocale(0, "RUS");
    printf("Введите n, где a[n][n]: ");
    (void)scanf("%d", &n);
    a = (int **)malloc(n * sizeof(int *));
    if (a == NULL) {
        free(a);
        exit(0);
    }
    for (i = 0; i < n; i++) {
        a[i] = (int *)malloc(n * sizeof(int *));
        if (a[i] == NULL) {
            free(a[i]);
            exit(0);
        }
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            a[i][j] = rand() % 2000 - 1000;
    }
    printf("Исходный массив:\n");
    max = a[0][0];
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%6d", a[i][j]);
            if (a[i][j] > max) {
                max = a[i][j];
                r = i;
                q = j;
            }
        }
        printf("\n");
    }
    printf
        ("Максимальный элемент массива a[%d][%d] = %d\n",
         r, q, max);
    printf("Массив после удаления:\n");
    for (i = r; i < n - 1; i++)
        a[i] = a[i + 1];
    for (i = 0; i < n - 1; i++) {
        for (j = q; j < n - 1; j++) {
            a[i][j] = a[i][j + 1];
        }
    }
    n--;
    a = (int **)realloc(a, n * sizeof(int *));
    if (a == NULL) {
        free(a);
        exit(0);
    }
    for (i = 0; i < n; i++) {
        a[i] = (int *)realloc(a[i], n * sizeof(int *));
        if (a[i] == NULL) {
            free(a[i]);
            exit(0);
        }
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%6d", a[i][j]);
        }
        printf("\n");
    }
 
    printf
        ("Отображение массива относительно горизонтальной оси симметрии:\n");
    for (i = 0, x = 1; i < n; i++, x++) {
        for (j = 0; j < n; j++)
            printf("%6d", a[n - x][j]);
        printf("\n");
    }
    printf
        ("Отображение массива относительно вертикальной оси симметрии:\n");
    for (i = 0; i < n; i++, x++) {
        for (j = 0, x = 1; j < n; j++, x++)
            printf("%6d", a[i][n - x]);
        printf("\n");
    }
    for (i = 0; i < n; i++)
        free(a[i]);
    free(a);
    return 0;
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
07.05.2016, 19:51
после realloc а теряешь a[n] (n до уменьшения на 1)

Добавлено через 3 минуты
сначала нужно realloc каждый a[i] [0;n-1), free(a[n-1]), n--, затем только realloc a

Добавлено через 8 минут
и перестановка строк сделана неверно
нужно их не затирать, а обменивать
именно затертая строка и потерялась
0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 54
07.05.2016, 21:12  [ТС]
retmas, А почему именно показывает на malloc
Цитата Сообщение от smert0406 Посмотреть сообщение
==4165== 24 bytes in 1 blocks are definitely lost in loss record 1 of 1
==4165== * *at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4165== * *by 0x400889: main (main.c:18)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
07.05.2016, 21:15
а чем же была выделена потерянная память по твоему?
0
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 54
07.05.2016, 21:35  [ТС]
retmas, всё равно не понимаю. Что нужно и где вставить?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
07.05.2016, 21:55
добавьте
C
1
free(a[r]);
перед перестановкой строк, тогда затертая строка будет удалена до ее затирания
1
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 54
07.05.2016, 22:10  [ТС]
retmas, Спасибо, сейчас проверю

Добавлено через 11 минут
retmas, Спасибо большое, всё заработало!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2016, 22:10
Помогаю со студенческими работами здесь

Как запустить программу на выполнение средствами Makefile?
Делаю так - выдает ошибку, программа не запускается. all: prog ./prog А вот если просто в командной строке набрать ./prog, то все...

Запустить одну программу и по завершении её работы запустить другую программу
Ребят подскажите как можно организовать такое задание в cmd... запустить любую программу, и по её завершению любую другую (к примеру,...

Запустить программу, при ее успешном завершении запустить следующую
- запустить программу PRIM.exe, при успешном завершении запустить PRIM_1.exe, иначе выдать сообщение об аварийном завершении...

Регистрация с проверками по БД
Пытаюсь сделать предварительную проверку на наличие в БД уже существующих записей в столбцах логин и email. Фрагмент кода ниже: ...

Задача с логическими проверками
Имеется три вазы: две круглых и одна квадратная Требуется определить можно ли их составить друг в друга, и если можно то в каком порядке. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru