Ошибка шины при попытке изменить значение переменной - PullRequest
0 голосов
/ 16 февраля 2019

Я создал переменную и присвоил ей какое-то значение.Когда я вызываю функцию и пытаюсь изменить значение переменной, я получаю ошибку шины.

Если я использую malloc, работает.

Мой вопрос:

Почему нетне работает без malloc?

потому что я думаю, что теоретически, когда вы создаете переменную, вы автоматически получаете адрес памяти (printf ("% p") доказывает это), и вы можете получить доступ к значениям этой переменной, поэтому памятьуже выделены и используются.

Так почему вы не можете изменить без ошибки шины?

вот мой код

void    strclr(char *s)
{
   printf("%s \n", s);
    while(*s)
    {
        *s = '\0';
        s++;
    }
    printf("%s ok", s);
}

int main()
{

    char *str = strdup("testing"); //allocate with malloc
    char *str2 = "testing";

    strclr(str); //works
    strclr(str2); //don't work, bus error;
}

1 Ответ

0 голосов
/ 16 февраля 2019

str2 указывает на строковый литерал .Они предназначены только для чтения и фактически размещаются в разделе памяти, доступном только для чтения.Вот почему вы получаете ошибку шины при попытке ее изменить.

Если вы определите str2 как массив, вы сможете изменить его.

char str2[] = "testing";

Здесь мыиметь массив, инициализированный строковым литералом.Это не строковый литерал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...