【发布时间】:2023-04-10 04:18:01
【问题描述】:
我对 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;
}
但在 VS 2008 中,上面的代码最终会出现内存损坏错误。我想,使用的标准存在细微差别。 我说的对吗?如果不是,请告诉我,为什么相同的代码不能在不同版本的 Visual Studio 中工作?
提前感谢您的回答。
附言我很好奇会发生什么,但还没有找到有关该主题的任何信息。
p.p.s.使用的语言 - C
【问题讨论】:
-
在给出代码示例时,通过包含所有必要的标头(在您的情况下为
<stdio.h><stdlib.h>和<string.h>)使它们可编译 -
对不起。我马上做出改变!
-
嗯...我将您的代码复制粘贴到 VS2008 中,构建并运行它...您猜怎么着?有用。我认为这是你没有告诉我们的事情(比如在 Dll 中声明 GetString 函数?)
-
@Kek 不,我没有。我告诉过你那天早上的情况。我不怀疑它必须起作用。
标签: c visual-studio pointers