9K+ 阅读量
段错误发生在程序试图访问它无权访问的内存区域时。换句话说,当程序试图访问超出操作系统为其分配的内存限制的内存时。段错误大多是由指针引起的,这些指针 - 未正确初始化。在它们指向的内存被重新分配或释放后使用。在索引数组中使用,其中索引超出数组边界。
348 阅读量
当进程因程序故障而被操作系统终止时,它会转储核心文件。发生这种情况的最典型原因是程序访问了无效的指针值,例如 NULL 或其内存区域之外的某些值。作为该进程的一部分,操作系统尝试将我们的信息写入文件,以便我们分析发生了什么。此核心文件可以按如下方式用于诊断和调试我们的程序 - 默认情况下,核心文件转储到 /proc/sys/kernel 目录。要调试核心文件,程序必须使用 ... 阅读更多
3K+ 阅读量
C++ 中的 explicit 关键字用于标记构造函数,使其不隐式转换类型。例如,如果您有一个 Foo 类 - class Foo { public: Foo(int n); // 为 Foo 对象分配 n 个字节 Foo(const char *p); // 使用 char *p 初始化对象 };现在,如果您尝试 Foo mystring = 'x';字符 'x' 会隐式转换为 int,然后会调用 Foo(int) 构造函数。但这并非预期结果。因此,为了防止这种情况并使代码更不容易出错,将构造函数定义为 explicit - 示例 class Foo { public: ... 阅读更多
您可以使用 C 中的 itoa 函数将 int 转换为字符串。示例 #include int main() { int a = 10; char *intStr = itoa(a); string str = string(intStr); cout
2K+ 阅读量
标准 C++ 没有提供执行此操作的方法。您可以使用 system 命令初始化 ls 命令,如下所示 - 示例 #include int main () { char command[50] = "ls -l"; system(command); return 0; }输出这将给出以下输出 - -rwxrwxrwx 1 root root 9728 Feb 25 20:51 a.out -rwxrwxrwx 1 root root 131 Feb 25 20:44 hello.cpp -rwxrwxrwx 1 root root 243 Sep 7 13:09 hello.py -rwxrwxrwx 1 root root 33198 Jan 7 11:42 hello.o drwxrwxrwx 0 root root 512 Oct 1 21:40 hydeout -rwxrwxrwx 1 root root 42 Oct 21 11:29 ... 阅读更多
323 阅读量
"" 输出一个换行符(以适当的平台特定表示形式,因此它在 Windows 上生成一个“\r”),但 std::endl 除了输出换行符外还会刷新流。通常,您不需要立即刷新流,这只会降低性能,因此,在大多数情况下,没有理由使用 std::endl。当您想要手动刷新流,因为您希望您的输出能够及时显示给用户(即没有延迟)时,您应该使用 std::endl 而不是将 '' 写入流。
383 阅读量
未定义行为是一种赋予实现者(例如编译器或操作系统的实现者)和计算机做任何他们“想要”做的事情的自由,换句话说,是不关心后果。发生段错误的情况本质上是短暂的。它们不会总是导致段错误,但也可以正确运行(或至少看起来正确)。例如,考虑以下代码片段 - #include int main() { int arr[2]; arr[0] = 0; arr[1] = 1; arr[2] = 2; // 未定义行为 arr[3] = 3; // 未定义行为 ... 阅读更多
12K+ 阅读量
您可以使用 C++ STL 函数 std::sort 对自定义对象向量进行排序。sort 函数有一个重载形式,它将 first、last 和 comparator 作为参数。first 和 last 是容器的第一个和最后一个元素的迭代器。comparator 是一个谓词函数,可用于说明如何对容器进行排序。示例 #include #include #include using namespace std; struct MyStruct { int key; string data; MyStruct(int key, string data) { this -> key = key; this -> data = data; } }; int ... 阅读更多
您可以使用 popen 和 pclose 函数在进程之间进行管道传输。popen() 函数通过创建管道、分叉和调用 shell 来打开一个进程。我们可以使用缓冲区读取 stdout 的内容并将其不断追加到结果字符串中,并在进程退出时返回此字符串。示例 #include #include #include #include using namespace std; string exec(string command) { char buffer[128]; string result = ""; // 打开到文件的管道 FILE* pipe = popen(command.c_str(), "r"); if (!pipe) { ... 阅读更多
895 阅读量
可以在 switch 语句中声明变量。您只需要在 switch 语句中声明它们并在新的作用域中使用它们即可。例如,示例 #include using namespace std; int main() { int i = 10; switch(i) { case 2: // 一些代码 break; case 10:{ int x = 13; cout