Чтение консольного ввода из компилятора VC ++ 2008: ошибка - PullRequest
0 голосов
/ 30 января 2012

Я использую эту простую ... но получаю ошибку.

, чтобы прочитать путь к каталогу из окна консоли, а затем распечатать путь в окне ..

пожалуйста, проверьте, почему я получаю необработанноеошибка исключения:

Ошибка: необработанное исключение в 0x1029984f (msvcr90d.dll) в new_one.exe: 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;
} 

Тем не менее я получаю исключение Сэма ..пожалуйста, дайте мне любое предложение

1 Ответ

2 голосов
/ 30 января 2012
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);

Обычноизбегайте использования динамического распределения (второй подход), если только объем памяти не слишком велик для размещения в стеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...