C ++: этот код компилируется, но выдает ошибку проверки времени выполнения # 2 - стек вокруг переменной 'num' поврежден. произошло - PullRequest
2 голосов
/ 15 октября 2019

Когда код выполняет переменную num, получить значение '9', тогда возникает ошибка.

char num = 'A';
int* pnum = (int *)#
*pnum = '9';

Что означает ошибка?

1 Ответ

6 голосов
/ 15 октября 2019

Приведение и использование указателя, как это, является неопределенным поведением. Вы не можете просто взять указатель на char и сделать вид, что он указывает на int и ожидать, что он будет работать правильно. По всей вероятности, стек поврежден, потому что int занимает больше памяти, чем char, поэтому, делая *pnum = '9';, вы записываете в недопустимую память. char имеет размер 1, но *pnum = '9';, вероятно, изменит больше памяти, чем этот (int обычно имеет размер 4). Таким образом, если в стеке зарезервирован 1 байт памяти для char, каковы эти три байта, которые он модифицирует?

Используйте char*, чтобы указать на char вместо:

int main() {
    char num = 'A';
    char* pnum = #
    *pnum = '9';
    std::cout << num << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...