求助c语言 好像是数据溢出
展开全部
虽然我没有看到你的 C 语言源程序,但是根据我的编程经验,引起数据溢出的情况通常有:
(1)、数组下标越界。这个是 C 语言初学者最容易犯的错误!例如,定义如下数组:
int num[10] ; 在 C 语言中其有效的下标范围应该是:0-9,而不是:1-10!如果在源程序中引用了 num[10]变量,那么必定会引起数据溢出现象。但是在PASCAL语言中,其数组有效的下标范围就是:1-10,这就是 C 语言和 PASCAL语言的区别。
(2)、内存变量的非正常使用,导致数据溢出。例如:
char * p ;
p = (char *)malloc(10000)*sizeof(char) ; /* 为指针变量 p 动态分配内存 */
if( p == NULL )
{ /* 假设没有这段判断内存是否正确分配成功的代码,就继续执行下面语句,那么就有可能出现数据溢出错误 */
printf("Memory allocation failured !\n") ; /* 内存分配失败,则退出系统 */
exit(1) ;
}
strcpy( p, "THIS IS A TEST STRING!" ) ; /* 内存分配成功,将字符串复制到 p 变量中 */
至于说其它的还有哪些情况,那就需要在平时的编程过程中积累经验了。
(1)、数组下标越界。这个是 C 语言初学者最容易犯的错误!例如,定义如下数组:
int num[10] ; 在 C 语言中其有效的下标范围应该是:0-9,而不是:1-10!如果在源程序中引用了 num[10]变量,那么必定会引起数据溢出现象。但是在PASCAL语言中,其数组有效的下标范围就是:1-10,这就是 C 语言和 PASCAL语言的区别。
(2)、内存变量的非正常使用,导致数据溢出。例如:
char * p ;
p = (char *)malloc(10000)*sizeof(char) ; /* 为指针变量 p 动态分配内存 */
if( p == NULL )
{ /* 假设没有这段判断内存是否正确分配成功的代码,就继续执行下面语句,那么就有可能出现数据溢出错误 */
printf("Memory allocation failured !\n") ; /* 内存分配失败,则退出系统 */
exit(1) ;
}
strcpy( p, "THIS IS A TEST STRING!" ) ; /* 内存分配成功,将字符串复制到 p 变量中 */
至于说其它的还有哪些情况,那就需要在平时的编程过程中积累经验了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询