This question already has answers here:
Crash or “segmentation fault” when data is copied/scanned/read to an uninitialized pointer
(5个答案)
3年前关闭。
我编写以下c++代码:
这给了我一个分割错误11。但是,如果我使用4个
另外,如果我尝试以下操作:
我收到总线错误10。请告诉我我做错了什么。我没有看到任何非法的内存访问。
动态长度
空间在堆中。堆操作上的内存分配速度较慢,但是可以在运行时调整其长度。
C++方式
让
(5个答案)
3年前关闭。
我编写以下c++代码:
int main() {
char *argv[4];
cin >> argv[0] >> argv[1] >> argv[2] >> argv[3];
cout << argv[0] << argv[1] << argv[2] << argv[3] << endl;
return 0;
}
这给了我一个分割错误11。但是,如果我使用4个
string
值初始化该数组,而不是接受用户输入然后打印,它就可以正常工作。另外,如果我尝试以下操作:
int main() {
char *argv[4] = {"bg","demo","running","2"};
cout << argv[0] << argv[1] << argv[2] << argv[3] << endl;
cin >> argv[0] >> argv[1] >> argv[2] >> argv[3];
cout << argv[0] << argv[1] << argv[2] << argv[3] << endl;
return 0;
}
我收到总线错误10。请告诉我我做错了什么。我没有看到任何非法的内存访问。
最佳答案
argv[i]
的char* argv[4];
只是指向无处的指针。
您需要准备/分配用于输入字符串写入的空间,并让argv[i]
指向。
方法如下:
固定长度
在栈上分配空间。速度很快,但是长度必须在编译时确定。
#define STR_SIZE 260
char argv[4][STR_SIZE];
动态长度
空间在堆中。堆操作上的内存分配速度较慢,但是可以在运行时调整其长度。
char* argv[4];
for(int i = 0; i < 4; i++)
argv[i] = new char[can_be_decided_at_runtime];
C++方式
让
std::string
为您处理分配。std::string argv[4];
// Then use argv[i].c_str(); to get inner const char* pointer.
关于c++ - 总线错误10-字符*数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42199657/
10-11 04:42