gpt4 book ai didi

c++ - 指针算法 C++ 的段错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:45 25 4
gpt4 key购买 nike

我正在尝试学习 C++ 中指针算法的一些操作。下面编写的代码抛出一个段错误。我无法理解程序如何尝试访问未分配的内存以导致段错误。

C++ 代码 (myarray.cc)

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
int * pointer_s3_1_a;
int * pointer_s3_1_a2;
int value_s3_1_a, value_s3_1_a2 ;

*pointer_s3_1_a=100;
cout<<"pointer_s3_1_a, *pointer_s3_1_a "<<pointer_s3_1_a<<' '<<*pointer_s3_1_a<<endl;
value_s3_1_a=*pointer_s3_1_a++;
cout<<"value_s3_1_a, pointer_s3_1_a, *pointer_s3_1_a "<<
value_s3_1_a<<' '<<pointer_s3_1_a<<' '<<*pointer_s3_1_a<<endl;

cout<<"pointer_s3_1_a2, *pointer_s3_1_a2 "<<pointer_s3_1_a2<<' '<<*pointer_s3_1_a2<<endl;

*pointer_s3_1_a2=100; //Runtime error |** Segmentation fault (core dumped) **|

return 0;
}

我正在使用 g++ 编译器在 Ubuntu 12.04 中运行该程序。在终端上运行 apt-cache policy g++ 得到以下输出。

g++: Installed: 4:4.6.3-1ubuntu5 Candidate: 4:4.6.3-1ubuntu5
Version table: * 4:4.6.3-1ubuntu5 0 500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages 100 /var/lib/dpkg/status

最佳答案

在这里,您声明了一个指向特定位置的指针:

int * pointer_s3_1_a;

在这里,您尝试将它指向的事物的值设置为 100:

*pointer_s3_1_a=100;

这是未定义的行为,可能会导致分段违规(虽然不一定,但可能会发生许多错误的事情,而且并不像段错误那样明显。你很幸运).

你必须首先让你的指针指向某个有效的地方。例如,

int n = 42;
pointer_s3_1_a = &n; // pointer points to n
*pointer_s3_1_a=100; // set the value of the thing it points to (n) to 100

关于c++ - 指针算法 C++ 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17449516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com