while(*a++ = *b++){} где a и b - действительные указатели на символы.
while(*a++ = *b++){}
Если b - это строка из 10 символов с нулевым символом в конце и a - это буфер, в котором было выделено 4 символа, вы будете писать вне выделенной памяти, используя приведенный выше код.
Один альтернативный ответ:
char *a = "Hello"; char *b = "World";
Это действительные указатели на символы. Но a не указывает на доступную для записи память.
Строки, на которые указывают, могут не заканчиваться нулем, означая, что данные считываются и назначаются в память, к которой у них не должно быть доступа, следовательно, нарушение.
Похоже, что память, выделенная для массива 'a', меньше длины массива 'b'.
Если вы запускаете его на MSDev, загрузите его в отладчик и пройдитесь по нему, и / или посмотрите на области памяти, где хранятся a и b, и посмотрите, что происходит. Это может быть любая из вещей, уже упомянутых как возможности.