正确的代码,为什么不能运行
1个回答
展开全部
我虽然没有看到你的程序源代码,但是我可以给你提供一点儿我的程序调试经验(以 C 语言为例):
(1)、你仔细检查你定义的数据类型是否有数组下标越界现象?
例如:你定义了一个字符型数组:char my_char[10] ; strcpy(my_char, "abcdefghij") ;
从字母 a 到字母 j 总共 10 个字母,将它们保存在 my_char 字符数组中,但是在 C 语言中,数组的有效下标是从 0 开始的,即:my_char[0] - my_char[9],而不是像 PASCAL 语言中数组的有效下标是从 1 到 10 的。所以如果你在程序中访问了 my_char[10]的话,那么肯定就会产生程序运行错误的情况。而这种错误不是 C 语言的语法错误,所以 C 语言的编译器是检查不出来的,只有到了运行程序时才会发现运行结果错误;
(2)、关于内存的合理分配、以及正确释放内存等使用问题,同样也是最、最常见的令人头疼的问题
在编写 C 程序过程中,关于涉及到内存的分配、以及内存分配失败等错误,必须要依靠自己来解决内存分配失败等问题。该类问题也是在编译中发现不了错误,但是在程序运行时就会产生崩溃现象
例如如下代码:
#include <stdlib.h>
#include <string.h>
void main( )
{
char * p ;
p = (char *)malloc(10000*sizeof(char)) ; /* 为指针 p 动态分配内存 */
if( p == NULL ) /* 若分配内存失败,则返回一个空指针 NULL,然后退出系统 */
{ /* 该段代码必不可少 */
printf("Memory allocation failured !\n"); /* 打印内存分配失败信息 */
exit(1) ; /* 退出应用程序 */
}
strcpy(p , "This is a test string\n"); /* 分配内存成功,则拷贝字符串到变量 p 中 */
printf("p: %s\n", p) ;
free(p) ; /* 释放内存 p */
}
(1)、你仔细检查你定义的数据类型是否有数组下标越界现象?
例如:你定义了一个字符型数组:char my_char[10] ; strcpy(my_char, "abcdefghij") ;
从字母 a 到字母 j 总共 10 个字母,将它们保存在 my_char 字符数组中,但是在 C 语言中,数组的有效下标是从 0 开始的,即:my_char[0] - my_char[9],而不是像 PASCAL 语言中数组的有效下标是从 1 到 10 的。所以如果你在程序中访问了 my_char[10]的话,那么肯定就会产生程序运行错误的情况。而这种错误不是 C 语言的语法错误,所以 C 语言的编译器是检查不出来的,只有到了运行程序时才会发现运行结果错误;
(2)、关于内存的合理分配、以及正确释放内存等使用问题,同样也是最、最常见的令人头疼的问题
在编写 C 程序过程中,关于涉及到内存的分配、以及内存分配失败等错误,必须要依靠自己来解决内存分配失败等问题。该类问题也是在编译中发现不了错误,但是在程序运行时就会产生崩溃现象
例如如下代码:
#include <stdlib.h>
#include <string.h>
void main( )
{
char * p ;
p = (char *)malloc(10000*sizeof(char)) ; /* 为指针 p 动态分配内存 */
if( p == NULL ) /* 若分配内存失败,则返回一个空指针 NULL,然后退出系统 */
{ /* 该段代码必不可少 */
printf("Memory allocation failured !\n"); /* 打印内存分配失败信息 */
exit(1) ; /* 退出应用程序 */
}
strcpy(p , "This is a test string\n"); /* 分配内存成功,则拷贝字符串到变量 p 中 */
printf("p: %s\n", p) ;
free(p) ; /* 释放内存 p */
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询