user-0 提问: 敲了一段C代码，感觉逻辑上理解的通，调试后出现了很多错误提示，自己也没办法解决，请各位朋友帮忙忙

回复:
user: user-1
content: 楼上的都告诉你具体原因了 简单来说就是你把数组数量计算错了，数组从0开始，长度为5的数组，0 1 2 3 4 没有5 另外就是，这个玩意在ubuntu12上面用gcc编译，不会报错，可以运行 这种错误如果出现在大程序里，问题隐蔽，不会必出，找bug要找半天

user: user-2
content: #include<stdio.h> #include<malloc.h> #include<string.h> void main() { char *src="hello,world";//创建一字符指针变量，并进行初始化，src指向字符串首地址 char *dest=NULL;//创建一字符指针变量，指向空指针      int len;  len=strlen(src)+1;//字符串所含字符数+1，即12 dest=(char*)malloc(len);//堆中申请len个字节的内存,并将首地放入dest指针变量中 char *d=dest;//创建一字符指针变量d，指向所申请内存的首地址 char *s=&src[len-2];//创建一字符指针变量s，将"hello,world"中最后一个字符的地址存入s while(len>=0)//将"hello,world"字符串中的字符倒序放入所申请的内存空间内 {   *d=*s;     d++;//该语句在循环中被执行13次     s--; len--;//12,11,...,2,1,0 } *d='\0';//补上字符串结束标志'\0'←企图往dest+12地址处写字节0，越界! printf("%s\n",dest); free(dest);//释放所申请的内存 }  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 引用 13 楼 DTCPzhuxh 的回复:应该和编译器有关系，楼主程序语法没有什么问题。 我在linux编译器上编译是可以通过的,但是在AIX上可以编译通过，但是在执行*d=*s时，报段错误。 希望能帮助到楼主！我下次在linux系统上调试一下，我还是*d=*s还是就出错了，VC++不认

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:要么编译或链接未通过 要么断点设在了没有实际汇编指令对应的C/C++语句处 要么断点设在了编译优化后没有实际汇编指令对应的C/C++语句处 要么……虽然后面两条不是很懂，不过还是谢谢回答

user: user-3
content: 应该和编译器有关系，楼主程序语法没有什么问题。 我在linux编译器上编译是可以通过的,但是在AIX上可以编译通过，但是在执行*d=*s时，报段错误。 希望能帮助到楼主！

user: user-2
content: 要么编译或链接未通过 要么断点设在了没有实际汇编指令对应的C/C++语句处 要么断点设在了编译优化后没有实际汇编指令对应的C/C++语句处 要么……

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。是个不错的办法！~  我想请问下，我程序设了断点都没法调试，大概是哪个环节出错了呢

user: user-0
content: 引用 6 楼 licusliu 的回复:vs编译可以运行   无错误 我一运行就出现上面我贴出的错误提示怎么回事哦

user: user-0
content: 引用 7 楼 cfjtaishan 的回复:[quote=引用 4 楼 lkcool7 的回复:] 首先，谢谢楼上两位朋友的回答，根据你们回答的内容我修改了程序但是在提示窗口还是出现了错误，提示如下： 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(9) : warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(13) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(14) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 'd' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 's' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(22) : error C2100: illegal indirection 1>生成日志保存在“file://d:\用户目录\Documents\Visual Studio 2005\Projects\test70\Debug\BuildLog.htm” 1>draft1 - 7 个错误，1 个警告 目前怀疑是你的编译环境的问题吧；另外，编写代码时注意中英文字符；我是在Linux编译你这部分代码的；代码是没问题的，只有可能是编译环境的问题了；[/quote]   我最后想到的可能就是这个原因，在VC++中老是有问题，解决不了。

user: user-4
content: 引用 4 楼 lkcool7 的回复:首先，谢谢楼上两位朋友的回答，根据你们回答的内容我修改了程序但是在提示窗口还是出现了错误，提示如下： 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(9) : warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(13) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(14) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 'd' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 's' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(22) : error C2100: illegal indirection 1>生成日志保存在“file://d:\用户目录\Documents\Visual Studio 2005\Projects\test70\Debug\BuildLog.htm” 1>draft1 - 7 个错误，1 个警告 目前怀疑是你的编译环境的问题吧；另外，编写代码时注意中英文字符；我是在Linux编译你这部分代码的；代码是没问题的，只有可能是编译环境的问题了；

user: user-5
content: vs编译可以运行   无错误

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-4
content: 1   #include<stdio.h>                                                                                                                                                                                           1 #include<malloc.h>     2 #include<string.h>     3          4 int main(void)     5 {    >>  6     char *src="hello,world";     7     char *dest=NULL;     8     int len;     9     len=strlen(src)+1;    10     dest=(char*)malloc(len);    11     if (NULL == dest)    12     |   return -1;    13     char *d=dest;    14     char *s=&src[len-2];    15         16     while(len > 1) {    17     |   putchar(len+'a');   //用于查看拷贝了多少个字符    18     |   *d=*s;    19     |   d++;    20     |   s--;    21     |   len--;    22     }    23     putchar(10);    24     *d='\0';    25     printf("%s\n",dest);    26     free(dest);    27         28     return 0;    29 }      ~

user: user-0
content: 所以问题还是没有得到解决，我是用的VC++平台，难道在这环境下没法运行此程序？？

user: user-0
content: 首先，谢谢楼上两位朋友的回答，根据你们回答的内容我修改了程序但是在提示窗口还是出现了错误，提示如下： 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(9) : warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(13) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(14) : error C2143: syntax error : missing ';' before 'type' 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 'd' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2065: 's' : undeclared identifier 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(17) : error C2100: illegal indirection 1>d:\用户目录\documents\visual studio 2005\projects\test70\main.c(22) : error C2100: illegal indirection 1>生成日志保存在“file://d:\用户目录\Documents\Visual Studio 2005\Projects\test70\Debug\BuildLog.htm” 1>draft1 - 7 个错误，1 个警告

user: user-0
content: 论坛里怎么回复帖子哦？

user: user-6
content: while(len>=0)应该改成while(len-1>0) 楼主多循环了两次，越界了，破坏了堆空间，所以free的时候报出异常了