#include <stdio.h> #include <new> #include <iostream> #include <stdlib.h> #include <string.h> int main() { int *p = NULL,*p1=NULL; int i; //p = (int *) malloc(10 * sizeof(int)); p = new int[10]; memset(p,0,sizeof(int) * 10); for(i=0;i<10;i++) printf("P:%d\t",p[i]); printf("addr p: %x\n",p); *(p-1) = 2; //如果不注释掉这一行则程序运行不正确 *(p+11) = 3; printf("addr before p: %x\n",p+11); printf("%x %x\n",*(p-1),*(p+11)); //free(p); delete [] p; printf("free successfully! \n"); return 0; }
当注释了*(p-1) = 2之后运行结果为:
当不注释*(p-1) =2 这一行时,结果为:
#include <stdio.h> #include <new> #include <iostream> #include <stdlib.h> #include <string.h> int main() { int *p = NULL,*p1=NULL; int i; //p = (int *) malloc(10 * sizeof(int)); p = new int[10]; memset(p,0,sizeof(int) * 10); for(i=0;i<10;i++) printf("P:%d\t",p[i]); printf("addr p: %x\n",p); *(p-1) = 2; //如果不注释掉这一行则程序运行不正确 *(p+11) = 3; printf("addr before p: %x\n",p+11); printf("%x %x\n",*(p-1),*(p+11)); //free(p); delete [] p; printf("free successfully! \n"); return 0; }
当注释了*(p-1) = 2之后运行结果为:
当不注释*(p-1) =2 这一行时,结果为: