已解决请参阅问题底部的解决方案。
我无法将字符串参数传递给我的函数,并且在调用函数时遇到分段错误。该程序接受命令行输入并在验证后将提供给函数的文件传递给该函数。
我的功能代码是这样的:
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[])
我也改变了变量。
为什么调试器中具有有效内存地址和值的变量在用作参数时会突然擦除?
编辑1:
在这里结合建议,我删除了该inputFile= argv[2]
行,调试器显示该strcpy
功能正常工作。
但是,我都尝试过compress(char *inputFile)
每个 Edwin Buck 和compress(argv[2])
每个 unwind,这两种更改仍然会导致Cannot access memory at address 0xBEB9C74C
奇怪的是我的文件验证功能checkFile(char inputFile[])
适用于inputFile
值,但是当我将相同的参数传递给compress(char inputFile[])
函数时,我得到了段错误。
编辑 2- 已解决
当你难倒你的教授 45 分钟时,你就知道发生了什么事。事实证明,我在 compress() 方法中将文件读取缓冲区声明为一个 5MB 长的数组,这反过来又最大化了堆栈帧。将缓冲区声明更改为全局变量就可以了,代码就会执行。
谢谢您的帮助!