从VC+读取控制台输入+;2008编译器:错误
我用的是这个简单的..但得到了错误 从控制台窗口读取目录路径,然后在窗口中打印路径 请检查我为什么收到未处理的异常错误: 错误:new_one.exe中0x1029984f(msvcr90d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x745C3A4从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
#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);