Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
vars-cat
0 / 0 / 2
Регистрация: 21.12.2011
Сообщений: 60
1

Динамические массивы: Нарушение прав доступа при записи по адресу 0xCCCCCCCC

12.02.2016, 22:10. Просмотров 453. Ответов 4
Метки нет (Все метки)

При запуске возникает ошибка "Нарушение прав доступа при записи по адресу 0xCCCCCCCC". Помогите найти причину этой ошибки.
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
#include "stdafx.h"
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void Free(double **a, int n)
{
    for(int i = 0; i < n; i++)
    {
        free(a[i]);
    }
 
    free(a);
}
 
void Print(double **a, int n, int m)
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            printf("%.2f", a[i][j]);
        }
 
        printf("\n");
    }
}
 
void MemAlloc(double ***a, int *n, int *m, double k1, double k2)
{
    printf("Введите количество строк: ");
    scanf("%d", n);
    printf("Введите количество столбцов: ");
    scanf("%d", m);
 
    *a = (double**)malloc(*n * sizeof(double*));
 
    for(int i = 0; i < *n; i++)
    {
        *a[i] = (double*)malloc(*m * sizeof(double));
    }
 
    for(int i = 0; i < *n; i++)
    {
        for(int j = 0; j < *m; j++)
        {
            *a[i][j] = k1 * i + tan(k2 * j);
        }
    }
}
 
int main()
{
    double **A = NULL;
    int n = 0, m = 0;
 
    setlocale(LC_ALL, "RUS");
    MemAlloc(&A, &n, &m, 2.9, 4.2);
    Print(A, n, m);
    Free(A, n);
 
    getchar();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2016, 22:10
Ответы с готовыми решениями:

Ошибка: нарушение прав доступа при записи по адресу
Надо написать следующую программу: дан символьный массив из 101 элемента. По спецификации %s...

Нарушение прав доступа при записи по адресу 0x00007430
Подскажите, пожалуйста, почему при выполнении программы появляется Вызвано исключение по адресу...

Сортировка qsort - Stack overflow, нарушение прав доступа при записи по адресу
Найдите, пожалуйста, ошибку в коде. Программа завершается с ошиибкой Stack overflow, и нарушение...

Нарушение прав доступа при записи по адресу 0х00000000 при добавлении элемента структуры
прошу помощи, выбивает эту ошибку при добавлении элемента структуры, также приму во внимание другие...

Вызвано исключение по адресу 0x75DD9845 (ucrtbase.dll) в LABA4.exe: 0xC0000005: нарушение прав доступа при записи по адр
Объясните пожалуйста, почему не работает программа? ( Выдает &quot;вызвано исключение...&quot; По идее она...

4
Dreamer_0x01
259 / 86 / 30
Регистрация: 29.10.2015
Сообщений: 194
13.02.2016, 02:12 2
А при пошаговом выполнении в отладчике - хотя бы на какой строке программа вылетает?

Вообще, адрес 0xCCCCCCCC говорит о том, что у вас есть где-то неинициализированный указатель. Это значение в дебаг-версии присваивается по умолчанию для указателей, и 0xcdcdcdcd - для данных.
0
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
13.02.2016, 02:24 3
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
40      for(int i = 0; i < *n; i++)
(gdb) n
42          *a[i] = (double*)malloc( *n * sizeof(double));
(gdb) n
40      for(int i = 0; i < *n; i++)
(gdb) n
42          *a[i] = (double*)malloc( *n * sizeof(double));
(gdb) n
 
Program received signal SIGSEGV, Segmentation fault.
0x00000000004008d3 in MemAlloc (a=0x7fffffffe0a0, 
    n=0x7fffffffe0a8, m=0x7fffffffe0ac, 
    k1=2.8999999999999999, k2=4.2000000000000002)
    at test.c:42
42          *a[i] = (double*)malloc( 15 * sizeof(double));
Причем на второй итерации
0
Jewbacabra
Эксперт PHP
3922 / 3230 / 1401
Регистрация: 24.04.2014
Сообщений: 9,793
13.02.2016, 02:55 4
Цитата Сообщение от vars-cat Посмотреть сообщение
C
1
*a[i] = (double*)malloc(*m * sizeof(double));
C
1
(*a)[i] = ... ;
приоритет [] выше *
2
art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 76
13.02.2016, 03:12 5
Jewbacabra, чуть с ума не сошел

Здесь тогда тоже
C
1
(*a)[i][j] = k1 * i + tan(k2 * j);
1
13.02.2016, 03:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2016, 03:12

Нарушение прав доступа при чтении по адресу
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf #include &lt;stdio.h&gt;...

Нарушение прав доступа при чтении по адресу
Здраствуйте, задано переписать функцию strspn(canst char *s1, const char *s2) так чтоб она искала...

0xC0000005: нарушение прав доступа при чтении по адресу 0x00000003
Доброго времени суток!Возникла проблема при вводе в консоль массива , после ввода элементов консоль...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru