Неожиданное поведение от указателей - PullRequest
0 голосов
/ 03 мая 2020

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

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char* args[]) 
{
    int dim;
    printf("Enter size of the block: ");
    scanf("%d", &dim);

    int* m1 = calloc(dim, sizeof(int));
    if(m1 == NULL)                     
    {
        printf("Error! memory not allocated.");
        exit(0);
    }

    for(int i = 0; i < dim; i++)
    {
        m1[i] = (atoi)args[i + 1];
    }

    for (int i = 0; i < dim; i++)
    {
        printf("m1's value %d: %d\n", i,*(m1 + i));
    }


    return 0;
}

Когда я пытаюсь скомпилировать его, он выдает 1 предупреждение и 1 ошибку

Es6.c:20:10: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
m1[i] = (atoi)args[i + 1];
      ^
Es6.c:20:18: error: expected ‘;’ before ‘args’
m1[i] = (atoi)args[i + 1];

Я использую atoi для преобразования аргумента (находится в аргументах) в инт. Является ли m1 вектором? Насколько я знаю, это указатель на начало вектора, который я инициализировал с помощью callo c, если это правильно, то почему это вызывает у меня проблемы? Когда я изменяю:

m1[i] = (atoi)args[i + 1];

на

m1[i] = *args[i + 1];

, это работает, но результаты не похожи на аргументы, которые я передал. Я предполагаю, что я передаю адрес, а не фактические аргументы, хранящиеся в нем. Ps Когда я передаю аргументы из файла, это возвращает мне ошибку сегментации, почему это так? (Это с реализацией * args [i + 1].

...