Исключение, генерируемое в 0x00007FF795014E96 в Project1.exe : 0xC0000005: Местоположение записи с нарушением доступа 0x00000000705B49C0

#c #arrays #malloc

#c #массивы #malloc

Вопрос:

 #include <stdio.h>
#include <ctype.h>
void spyral(int boyut)
{
    int i;
    int*a = malloc(boyut * sizeof(int*));
    for (i = 0; i < boyut; i  )
    {
        a[i] = i   1; //program is erroring here
    }
    for (i = 0; i < boyut; i  )
    {
        printf("%d", a[i]);
    }
    /*int x = 5;
    int y = 5;
    int** a = malloc(x * sizeof(int*));
    for (int i = 0; i < y; i  ) {
        a[i] = malloc(sizeof(int*) * y);
    }*/
}
int main()
{
    spyral(6);
}
  

Я хочу отправить переменную в функцию из main, этот код не работает в Visual studio, но это работает на dev-c . Я хочу работать в Visual Studio, в чем проблема?

Комментарии:

1. Массив указателей не является указателем на массив.

2. boyut * sizeof(int*) должно быть boyut * sizeof(int) . Вы пытаетесь выделить место для 6 целых чисел.

3. Единственная проблема, которую я вижу, это то, что #include <stdlib.h> отсутствует.

4. Это означает то же самое, что и в int*a . Когда вы это делаете sizeof (int) , вы запрашиваете размер переменной типа int . Когда вы это делаете sizeof (int *) , вы запрашиваете размер переменной типа, на которую указан указатель int .

5. Если включение <stdlib.h> исправило вашу проблему, вы также должны были получать жалобы от компилятора a = malloc(...) . Что-то об инициализации указателя из целого числа. Не игнорируйте предупреждения компилятора.