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

时间:2012-01-30 09:35:05

标签: c visual-studio-2008 visual-c++

我正在使用这个简单的..收到错误。

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

请检查为什么会出现未处理的异常错误:

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

#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;
} 

我仍然得到了sam eexception ..请给我任何建议

1 个答案:

答案 0 :(得分:2)

char *path;

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

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

在堆栈上分配对象:

在堆栈上本地创建path数组,例如:

#define MAX_PATH_LENGTH 256

char path[MAX_PATH_LENGTH];

动态内存分配:

#define MAX_PATH_LENGTH 256

char *path=(char *)malloc(MAX_PATH_LENGTH);

如果您使用第二种方法,则需要在使用后明确free分配的内存:

free(path);

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