Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针的奇怪之处 我对VS C++有一些误解。在2010版中,下面的代码运行良好:我可以得到一个字符串,并且可以释放内存后缀 #include <stdlib.h> #include <string.h> #include <stdio.h> #define MAX 14 void GetString(char **str); int main(int argc, char *argv[]) { char *str = NULL; GetString(&str); printf("%s\n", str); getchar(); free(str); return 0; } void GetString(char **str) { char *s = (char *) malloc(sizeof(char) * MAX); strcpy(s, "HELLO, WORLD!"); *str = s; } #包括 #包括 #包括 #定义最大值14 void GetString(字符**str); int main(int argc,char*argv[]) { char*str=NULL; GetString(&str); printf(“%s\n”,str); getchar(); 自由基(str); 返回0; } void GetString(字符**str) { char*s=(char*)malloc(sizeof(char)*MAX); strcpy(s,“你好,世界!”); *str=s; }_C_Visual Studio_Pointers - Fatal编程技术网

指针的奇怪之处 我对VS C++有一些误解。在2010版中,下面的代码运行良好:我可以得到一个字符串,并且可以释放内存后缀 #include <stdlib.h> #include <string.h> #include <stdio.h> #define MAX 14 void GetString(char **str); int main(int argc, char *argv[]) { char *str = NULL; GetString(&str); printf("%s\n", str); getchar(); free(str); return 0; } void GetString(char **str) { char *s = (char *) malloc(sizeof(char) * MAX); strcpy(s, "HELLO, WORLD!"); *str = s; } #包括 #包括 #包括 #定义最大值14 void GetString(字符**str); int main(int argc,char*argv[]) { char*str=NULL; GetString(&str); printf(“%s\n”,str); getchar(); 自由基(str); 返回0; } void GetString(字符**str) { char*s=(char*)malloc(sizeof(char)*MAX); strcpy(s,“你好,世界!”); *str=s; }

指针的奇怪之处 我对VS C++有一些误解。在2010版中,下面的代码运行良好:我可以得到一个字符串,并且可以释放内存后缀 #include <stdlib.h> #include <string.h> #include <stdio.h> #define MAX 14 void GetString(char **str); int main(int argc, char *argv[]) { char *str = NULL; GetString(&str); printf("%s\n", str); getchar(); free(str); return 0; } void GetString(char **str) { char *s = (char *) malloc(sizeof(char) * MAX); strcpy(s, "HELLO, WORLD!"); *str = s; } #包括 #包括 #包括 #定义最大值14 void GetString(字符**str); int main(int argc,char*argv[]) { char*str=NULL; GetString(&str); printf(“%s\n”,str); getchar(); 自由基(str); 返回0; } void GetString(字符**str) { char*s=(char*)malloc(sizeof(char)*MAX); strcpy(s,“你好,世界!”); *str=s; },c,visual-studio,pointers,C,Visual Studio,Pointers,但是在VS2008中,上面的代码最终会出现内存损坏错误。我想,使用的标准有一点不同

但是在VS2008中,上面的代码最终会出现内存损坏错误。我想,使用的标准有一点不同<我说得对吗?如果没有,请告诉我,为什么相同的代码在不同版本的Visual Studio中不起作用?

事先谢谢你的回答

p、 我很好奇发生了什么,但还没有找到关于这个话题的任何信息


p、 p.s.使用的语言-C

您没有包含所需的标题,这意味着您的代码可能会被不同的编译器以不同的方式解释。您应该添加:

#include <stdlib.h>
以及执行I/O,为此您需要:

#include <string.h>
#include <stdio.h>
最好写为:

char *s = malloc(MAX);

  • 它是
  • sizeof(char)
    始终为1,因此它只会增加混乱

  • 最后,在使用返回的指针之前,您当然应该检查
    malloc()
    是否成功。

    在给出代码示例时,请通过包含所有必要的标题(在您的示例中是
    )使其可编译,我很抱歉。我现在就要改变!好。。。我在VS2008中复制粘贴您的代码,构建并运行它。。。你猜怎么着?它起作用了。我想这是你没有告诉我们的事情(比如在Dll中声明GetString函数?)@Kek不,我没有。我告诉过你那天早上的情况。我不怀疑它一定会起作用。对不起,我没有从文件中复制所有代码。我也不能把这当作一个答案。因为这是我能想到的最简单的例子。此外,如果您不在VS中强制转换malloc,它将显示一个错误!1智能感知:“void*”类型的值不能用于初始化“char*”类型的实体。此外,如果malloc失败,它将返回NULL。方法中的s变量将为NULL。所以,是的,我有一个潜在的风险,一切都会爆炸。但是有一个不同的问题。@ USE1415536:你想把它编译成C++,不是吗?尝试将其编译为C,因为您知道,它是C.@netcoder,它将在Linux中工作(gcc不会显示任何例外或警告)。我已经试过了。@netcoder:即使在VS2015中,这似乎也是一个好主意;智能感知将C文件视为C++,所以即使源编译时没有警告,它有时也会显示一堆错误。
    char *s = malloc(MAX);