从VC+读取控制台输入+;2008编译器:错误

从VC+读取控制台输入+;2008编译器:错误,c,visual-studio-2008,visual-c++,C,Visual Studio 2008,Visual C++,我用的是这个简单的..但得到了错误 从控制台窗口读取目录路径,然后在窗口中打印路径 请检查我为什么收到未处理的异常错误: 错误:new_one.exe中0x1029984f(msvcr90d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x745C3A4 #include "stdafx.h" #include <windows.h> #include <tchar.h> #include <stdio.h> #define MAX_PATH

我用的是这个简单的..但得到了错误

从控制台窗口读取目录路径,然后在窗口中打印路径

请检查我为什么收到未处理的异常错误:

错误:new_one.exe中0x1029984f(msvcr90d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x745C3A4

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define MAX_PATH_LENGTH 256 
int main(int argc, char *argv[])
{
int i;
int pathlength=100;
char *path=(char *)malloc(MAX_PATH_LENGTH);
free(path);
printf("Enter the path:");
scanf("%s",&path); 
printf("%s",path);
getchar();
return 0;
} 
#包括“stdafx.h”
#包括
#包括
#包括
#定义最大路径长度256
int main(int argc,char*argv[])
{
int i;
int路径长度=100;
char*path=(char*)malloc(最大路径长度);
自由(路径);
printf(“输入路径:”);
scanf(“%s”、&path);
printf(“%s”,路径);
getchar();
返回0;
} 
我还是有点奇怪,请给我一些建议

char *path;
没有分配任何内存。您正在写入未分配的指针变量,导致未定义的行为,这显示为分段错误

您可以通过两种方式解决此问题:

正在堆栈上分配对象: 在堆栈上本地创建
path
作为数组,例如:

#define MAX_PATH_LENGTH 256

char path[MAX_PATH_LENGTH];
动态内存分配: 如果使用第二种方法,则需要在使用后显式地释放分配的内存:

free(path);

通常,避免使用动态分配(第二种方法),除非内存需求太大,无法在堆栈上分配。

malloc返回值的转换充其量是冗余的;而且(就像在提供的代码中一样)它可能隐藏了一个编译器本来会捕获到的错误exception@hari:您应该调用
free()
使用完
路径后
立即将内存分配给
路径
,在下一个语句中使用
空闲()
将其释放,这会使指针没有内存,与原始问题中的情况相同。在
返回0之前调用
空闲()
@hari:allow,
scanf(“%s”,&path)应该是
scanf(“%s”,路径)
,注意
路径前面没有
。另外,我建议你去读一本好书,学习基础知识。你需要学习语言,而不是在线教程或博客。嗨,如果我使用字符[256];它将只显示一个文件夹的目录路径,例如:F:\test。如果我将该路径用作F:\test\tools,则不会显示任何内容。如果我使用动态内存分配过程,为什么会出现未处理的异常?下一步,您为什么要释放分配给
路径的内存?在使用完
path
后,最好释放该路径的内存。也就是说,在您的程序中,它正好在您
返回0之前谢谢你的回复…但是我得到了同样的未添加的异常…有什么办法解决它吗?现在是你学习使用调试器并自己逐步完成代码的时候了。
free(path);