编程练习中的C++分段错误

C++ segmentation fault on programming exercise

本文关键字:分段 错误 C++ 练习 编程      更新时间:2023-10-16

当我试图解决这个编程马拉松式C++练习时,遇到了一个分段错误,但我在任何地方都找不到错误:

#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <stdio.h>
#include <string.h>


using namespace std;
int main(void)
{
  int m,n,i,di,x,y;
  char* let;
 cin >> n >> m;
 x=0;
 y=0;
 for (i = 0; i < n; i++)
 {
   cin >> let >>di;
   if ((strcmp(let,"S"))||(strcmp(let,"O"))){
    di=(-di);
   }
   if ((strcmp(let,"N"))||(strcmp(let,"S")))
   {
     x=+di;
   }
   if ((strcmp(let,"L"))||(strcmp(let,"O")))
   {
     y=+di;
   }
  if ((y*y)+(x*x)>(m*m))
  {
    cout << "1";
    return 0;
  }
}
  cout << "0";
  return 0;
}

此代码:

char* let;
cin >> let

将用户输入存储到由CCD_ 1指向的存储器中。

这是对未初始化指针的滥用。cin相信你已经将它指向了有效内存,但你没有为它分配任何东西。它指向的位置是未知的。

最简单的解决方案是将let更改为适当的C++std::string