Я использую valgrind, чтобы выяснить запутанную проблему направления стека.
См. Код ниже, я хочу знать, почему оператор "p1 + = 0x80; * p1 = 1" действителен иоператор "p2 - = 0x80; * p2 = 1" является недопустимой записью в соответствии с valgrind?
Я думаю, что все переменные распределены в стеке в соответствии с ОС, и она растет доболее низкий адрес, поэтому я думаю, что «- =» является действительным, а «+ =» недопустимым, потому что он может быть большим по сравнению с вершиной стека, которая может быть не в пределах стека.
#include <stdlib.h>
int main()
{
int a;
int *p1 = &a;
p1 += 0x80;
int *p2 = &a;
*p1 = 1;
p2 -= 0x80;
*p2 = 1;
return EXIT_SUCCESS;
}