搜索
首页 电脑/网络 软件

这段程序在tc上无错误 在vc++6.0就显示内存不能read

  大家帮忙看看吧 #include sort(int **p,int n) { int *t,i,j; for(i=0;i**(p+j)) { t=*(p+i); *(p+i)=*(p+j); *(p+j)=t; } } } } main() { int i,n,**p; printf("Please input count of numbers:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("The %d number:",i+1); scanf("%d",*(p+i)); } printf("\nThe result is :\n"); sort(p,n); for(i=0;i<n;i++) { printf("%d ",**(p+i)); } getch(); }。
  

全部回答

2012-11-09

0 0

    TC2。0是DOS程序,在dos程序眼里是没有内存保护,真的dos下,是没有内存保护的。 windows的dos模式下是windows欺骗dos模式的程序:你可以不受限制的使用整个内存空间。
  其实这个空间是一个假的连续的内存空间,他好象可以访问整个内存空间,其实不能访问别的程序的内存空间,这个连续的空间是这个进程独有的。  其实是整个系统的地址空间的一个小部分。
  只是进行了地址的重新映射 你的scanf("%d",*(p+i)) 中*(p+i)指向的地址并没有进行分配,在有内存保护的时候是不能读也不能写的 你的p ,p+i等指针都是指向不明地址空间的野指针,这些内存空间很可能是被保护的。
     dos模式下,没有内存保护,不报错,野指针指到哪就写到哪,当然可能破坏有用的内存空间中的数据,也可能正好指向空的内存空间程序能正常运行。 。

2012-11-08

49 0

// if(**(p+i)>**(p+j)) // 去掉一个*, 写成下面的样子 if(*(p+i)>*(p+j)) // 另外 // int i,n,**p; // 该指针p没有初始化, 或者分配块内存. // 应当声明为 *p;

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
软件
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
软件
多媒体软件
系统软件
办公软件
网络软件
图像处理软件
举报
举报原因(必选):
取消确定举报