user-0 提问: malloc()分配内存后重指向问题

回复:
user: user-1
content: 楼上的同志们不好好看，人家是编译时候就有问题，请问楼主，程序贴对了？（照你这个编译绝对不会有问题）  引用 20 楼 baipv008 的回复:改成：     char* dest = NULL;     char* d;     dest = (char*)malloc(len);      d =dest;  或把.c改成.cpp文件。C里面要求变量声明在开头。 看看你楼上的，人家们说的很对了，尤其18楼，19楼的。

user: user-2
content: 改成：     char* dest = NULL;     char* d;     dest = (char*)malloc(len);      d =dest;  或把.c改成.cpp文件。C里面要求变量声明在开头。

user: user-3
content: #include"string.h" #include "stdio.h" main() { char*src="hello,world"; int len=strlen(src); char* dest = (char*)malloc(len+1); dest[len]=0;//这个应放前面，不然，len被改掉了          char* d=dest; char* s=&src[len-1]; while(--len!=0)    *d++ = *s--;   *d=0;    printf("%s\n",dest);   return 0; }

user: user-3
content: 分配空间不足，printf会有问题   #include"string.h" #include "stdio.h" main() { 	char*src="hello,world"; 	int len=strlen(src); 	char* dest = (char*)malloc(len+1);         char* d=dest; 	char* s=&src[len-1]; 	while(--len!=0)   		*d++ = *s--;  	*d=0; dest[len]=0;   	printf("%s\n",dest);  	return 0; }

user: user-4
content: \0 空间没分配，肯定出错

user: user-1
content: 楼主要说你这个程序呢，问题确实有，*d = 0请问这个d指向了哪里，你有为人家分配内存空间吗？另外malloc这个函数哪里来的？起码得malloc.h吧。 但是你说第一个能编译过，第二个竟然编译不过我就奇怪了，这怎么可能呢！！！你确定你贴的第二段程序编译不过？？？

user: user-5
content: char* dest = (char*)malloc(len+1);    //也要为'\0'申请一个字节的空间哦 程序没有发现什么重大问题，找不到malloc的定义，应该是你没有正确引入头文件哦。

user: user-6
content: 引用 7 楼 u011779875 的回复:加上头文件 #include<stdlib.h> char* dest = (char*)malloc(len+1);  这个是对的 char* dest = (char*)malloc(len); 这个是错得 C语言的编译器不检查  C++的编译器检查   gcc的C可以通过 可能不会报错 C++的编译器直接不通过

user: user-7
content: 引用 8 楼 u012527186 的回复:[quote=引用 5 楼 mujiok2003 的回复:]  #include <string.h> #include <stdio.h> int main() { 	char*src="hello,world"; 	int len=strlen(src); 	char* dest = (char*)malloc(len+1); 	char* d=dest; 	char* s=&src[len-1]; 	while(len)   		*d++ = *s--, --len;  	*d=0;  	printf("%s\n",dest);         free(dest);  	return 0; }   你能解释以下问什么以下语句不行？还是在VC6.0环境下不行。      char* dest = NULL;      dest = (char*)malloc(len);     char* d =dest;//以上三句有点问题，在VC6.0中有问题，但是修改程序如下则没问题 [/quote]  vc 6.0可能谎报了。 vc 6.0问题不少，升级编译器是必需的了。

user: user-6
content: char* dest = (char*)malloc(len+1); 这句话有问题 strlen算得是处/0 所以开辟要大一个字节 C编译器不检查 但是C++严格检查

user: user-6
content: 写程序的时候 一定要记得写头文件 消除一切warning 心里得对所用的标准库 及它的实现 和易出现的问题 掌握才可以放心大胆的用

user: user-6
content: 引用 8 楼 u012527186 的回复:[quote=引用 5 楼 mujiok2003 的回复:]  #include <string.h> #include <stdio.h> int main() { 	char*src="hello,world"; 	int len=strlen(src); 	char* dest = (char*)malloc(len+1); 	char* d=dest; 	char* s=&src[len-1]; 	while(len)   		*d++ = *s--, --len;  	*d=0;  	printf("%s\n",dest);         free(dest);  	return 0; }   你能解释以下问什么以下语句不行？还是在VC6.0环境下不行。      char* dest = NULL;      dest = (char*)malloc(len);     char* d =dest;//以上三句有点问题，在VC6.0中有问题，但是修改程序如下则没问题 [/quote]环境不行 这个malloc必须头文件的 在VC6.0 你要是写C程序最后用gcc编译器 编辑器随便 所以用VS2010也许 用codeblocks 也行  这个编译器不同 要求不同 所以想要运用自由随便写 还是用gcc的才是王道 你用那个会分不清什么事C什么是C++得

user: user-8
content: #include<stdlib.h>或者<malloc.h> 用gcc编译运行没问题

user: user-0
content: 引用 5 楼 mujiok2003 的回复: #include <string.h> #include <stdio.h> int main() { 	char*src="hello,world"; 	int len=strlen(src); 	char* dest = (char*)malloc(len+1); 	char* d=dest; 	char* s=&src[len-1]; 	while(len)   		*d++ = *s--, --len;  	*d=0;  	printf("%s\n",dest);         free(dest);  	return 0; }   你能解释以下问什么以下语句不行？还是在VC6.0环境下不行。      char* dest = NULL;      dest = (char*)malloc(len);     char* d =dest;//以上三句有点问题，在VC6.0中有问题，但是修改程序如下则没问题

user: user-6
content: 加上头文件 #include<stdlib.h>

user: user-0
content: 引用 3 楼 u011779875 的回复:俩个函数除了 没有检查dest malloc的返回值是否成功外 没看到别的违规操作   运行应该都是把hello,world倒叙输出  请有VC6.0环境的运行编译以下就知道问题所在了：   #include"string.h" #include "stdio.h" main() { 	char*src="hello,world"; 	int len=strlen(src);  	char* dest = NULL;  	dest = (char*)malloc(len); 	char* d =dest;//以上三句有点问题，在VC6.0中有问题，但是修改程序如下则没问题          char* dest = (char*)malloc(len);         char* d=dest;//修改完后，即可通过编译，实现功能  	char* s=&src[len-1]; 	while(len--!=0)   		*d++ = *s--;  	*d=0;  	printf("%s\n",dest);  	return 0; }

user: user-7
content: #include <string.h> #include <stdio.h> int main() { 	char*src="hello,world"; 	int len=strlen(src); 	char* dest = (char*)malloc(len+1); 	char* d=dest; 	char* s=&src[len-1]; 	while(len)   		*d++ = *s--, --len;  	*d=0;  	printf("%s\n",dest);         free(dest);  	return 0; }

user: user-6
content: 你用的编译器没加头文件 肯定不行啊 因为C++ 和C的函数加载后的名称不同 所以要加相应的头文件

user: user-6
content: 俩个函数除了 没有检查dest malloc的返回值是否成功外 没看到别的违规操作   运行应该都是把hello,world倒叙输出

user: user-0
content: 该程序是实现，数的倒转，如“abcd”,变成"dcba" 当用以下程序编译时，  #include"string.h" #include "stdio.h" main() { 	char*src="hello,world"; 	int len=strlen(src);  	char* dest = NULL;  	dest = (char*)malloc(len); 	char* d =dest;//以上三句感觉有点问题  	char* s=&src[len-1]; 	while(len--!=0)   		*d++ = *s--;  	*d=0;  	printf("%s\n",dest);  	return 0; }    编译信息如下（编译环境VC6.0）： Compiling...  : warning C4013: 'malloc' undefined; assuming extern returning int : error C2143: syntax error : missing ';' before 'type' : error C2143: syntax error : missing ';' before 'type' : error C2065: 'd' : undeclared identifier : error C2100: illegal indirection : error C2065: 's' : undeclared identifier  : error C2100: illegal indirection : error C2106: '=' : left operand must be l-value : error C2100: illegal indirection Error executing cl.exe.  Text1.exe - 8 error(s), 1 warning(s)