решено См. Нижнюю часть вопроса для решения.
У меня проблемы с передачей аргумента String моей функции, и я получаю ошибку сегментации при вызове функции.Программа принимает данные командной строки и передает файл, предоставленный функции, после проверки.
Мой код функции выглядит следующим образом:
char *inputFile; //
inputFile= argv[2];
strcpy(inputFile, argv[2]);
compress(inputFile){
//file open and creation work bug-free
//compression action to be written
void compress(char inputFile){
//compression code here
}
Когда вызывается функция, возникает ошибкавыбрасывается, и значение inputFile равно 0x00000000, когда до вызова функции у него было место в памяти и значение пути к тестовому файлу.
Некоторые варианты, которые я пробовал, с соответствующими прототипами функций:
compress(char *inputFile)
compress (char inputFile[])
Я также изменил переменную.
Почему переменная с действительным адресом памяти и значением в отладчике внезапно стирается при использовании в качестве параметра?
Edit 1:
Включая предложения здесь, я удалил строку inputFile= argv[2]
, и отладчик показывает, что функция strcpy
работает.
Однако я попробовали compress(char *inputFile)
для Эдвина Бака и compress(argv[2])
для размотки, и оба изменения по-прежнему приводят к Cannot access memory at address 0xBEB9C74C
Странно то, что моя функция проверки файлов checkFile(char inputFile[])
работает со значением inputFile
, но когдая пастот же параметр для функции compress(char inputFile[])
, я получаю ошибку по умолчанию.
Edit 2- решено
Вы знаете, что что-то происходит, когда вы ставите своего профессора в тупик за 45минимумОказывается, я объявил буфер чтения файла как массив длиной 5 МБ внутри метода compress (), который, в свою очередь, максимально увеличил кадр стека.Замена объявления буфера на глобальную переменную сделала свое дело, и код выполняется.
Спасибо за помощь!