Код C ++ падает, когда я пытаюсь получить доступ к строковому члену глобального объекта - PullRequest
0 голосов
/ 24 января 2020

Я запускаю эту программу на платформе ThreadX с ограниченными ресурсами ARM. Код построен с использованием компилятора G CC g ++. Я вижу странный cra sh, который я хотел бы понять больше.

У меня есть класс, в котором есть член, который является строкой. Я вижу, что программа падает, когда я делаю объект глобальным (Случай 1 ниже). Сбой в операторе print, где я пытаюсь найти длину строкового объекта. Но когда я создаю локальный объект (пример 2 ниже), программа не создает sh. Когда я создаю объект, используя 'new', он не создает sh (случай 3). У меня есть грубое представление о том, что может идти не так (не вызывается конструктор? Глобальные объекты хитры и т. Д. c.). Я хотел бы понять, что может быть не так под капотом.

class A
{

    public:
        void printS()
        {
            printf(" string sz = %d \r\n", s.size());
        };
        string s;

};

Дело 1:

A a;
void main()
{
    /* crashes inside the function prints while accessing the string s */
    a.printS();
}

Дело 2:

void main()
{
    A a;  
    a.printS(); //works
}

Дело 3:

A* a;
void main()
{   a = new A();
    a->printS(); //works
}

1 Ответ

0 голосов
/ 24 января 2020

Оба случая работают, вы только что сделали опечатку.

print instead of **printf**
...