指针数组的分段错误

     2023-02-21     51

关键词:

【中文标题】指针数组的分段错误【英文标题】:segmentation fault with pointer array 【发布时间】:2018-06-06 23:10:33 【问题描述】:

尝试为我的指针数组输入数据时出现段错误。我对编码很陌生,所以任何帮助都会很棒。我的任务是创建一个指针数组,然后显示、交换它们然后对它们进行排序

#include <iostream>
using namespace std;

float getValueFromPointer(float* thePointer)

   return *thePointer;


float* getMinValue(float* a, float* b)

   if (*a < *b)
   
      return a;
   
   else
   
      return b;
   


int main()

   int arraySize;
   cout << "Enter the array size: ";
   cin >> arraySize;

   float** speed = new float*[arraySize]; // dynamically allocated array

   for(int i = 0; i < arraySize; i++)
   
      cout << "Enter a float value: ";
      cin >> *speed[i];
   

    // Core Requirement 2
   for (int i = 0; i < arraySize; i++)
   
      float value = getValueFromPointer(*speed+i);
      cout << "The value of the element " << i << " is: ";
      cout << value << endl;
   



   //float *pointerToMin = getMinValue(&speed[0], &speed[arraySize - 1]);
   //cout << *pointerToMin << endl;

   delete [] speed;
   speed = NULL;
   return 0;

【问题讨论】:

为什么要使用指针和new?您应该更喜欢使用std::vector&lt;float&gt;。你根本不需要指针;使用参考。 【参考方案1】:

您只为外部数组分配了空间,但您还需要为每个内部浮点数分配空间。

所以在调用此行之前:

cin >> *speed[i];

你需要先为其分配空间:

speed[i] = new float;

【讨论】:

为什么?为什么不只是float* speed = new float[arraySize]; 他可以。但他明确表示,任务是创建一个指针数组。 重读,你是对的。任务很疯狂,但你是对的。 他们至少可以将分配设为结构指针数组,以便动态分配内存......有点意义。不过,我想这会使排序练习变得非常复杂。 感谢您的帮助,非常感谢!【参考方案2】:

您的问题是您分配了一个浮点指针数组。您需要分配一个浮点数组。所以目前你没有为实际的浮点数分配内存。如果您这样做,您将分配该内存:

float *speed = new float[arraySize];

您不需要我可以看到的 2D/锯齿状阵列。如果您从上面的代码开始,编译器错误应该会引导您朝着正确的方向前进。 (基本上,您将开始从代码中的很多地方删除 *。)

编辑 根据我误解的您的要求,一种可能的方法如下。另一个答案(不是我的答案)在比这更广泛的场景中是有意义的,但希望这是另一个角度来思考你试图解决的那个相当随意的问题:

int main()

  float *pFloats = new float[10];
  float **ppFloats = new float*[10];
  //assign float values and pointers to them in same loop
  for (int i = 0; i < 10; i++)
  
    pFloats[i] = i;
    ppFloats[i] = &pFloats[i];
  
  //swap two arbitrary pointers
  float *pTemp = ppFloats[4];
  ppFloats[4] = ppFloats[5];
  ppFloats[5] = pTemp;

  //print our float array
  for (int i = 0; i < 10; i++)
    printf("%f\n", pFloats[i]);
  //print our float array *through* our pointers
  for (int i = 0; i < 10; i++)
    printf("%f\n", *ppFloats[i]);
  delete[] ppFloats;
  delete[] pFloats;

忽略硬编码的常量等...这里的重点是我为浮点数创建了一个连续的内存区域,然后在其上创建了一个浮点指针数组。请注意,我可以对指针数组进行排序,而对原始数组的影响为零。有很多更聪明的方法可以做到这一点,但是...看起来您正在学习原始指针,所以...

与另一个为浮动创建锯齿状内存的答案形成对比(一次 1 个,按需,不一定连续)。

【讨论】:

@KillzoneKid - 是的,我现在明白了。我希望他误解了这个要求,但如果他确认没有,我会杀死这个答案。 是的,我的任务是创建一个指针数组...在此之前,我拥有它就像您的代码一样,它运行良好,但“拉伸挑战”是创建一个指针数组。不过谢谢! @Jacobi97 - 更新了另一种可以为实际浮点数分配内存的方式。 @zzxyz 非常感谢您提供的所有帮助。编程太难了!但我为你们这样的人感到高兴! @Jacobi97 - 绝对。 PS--您的教授可能正在寻找另一种方法(按需),但是对于这个问题,这两种方法都没有特别的意义,并且在现有数据结构(在这种情况下为浮点数组)上拍打“间接层” ) 几乎闻所未闻。

Cray 指针和数组的分段错误:我做错了啥?

】Cray指针和数组的分段错误:我做错了啥?【英文标题】:Segmentationfaultwithcraypointersandarrays:WhatamIdoingwrong?Cray指针和数组的分段错误:我做错了什么?【发布时间】:2020-03-1315:32:44【问题描述】:我的代码很复杂,但以下MWEFortra... 查看详情

添加指向数组的指针时出现分段错误

】添加指向数组的指针时出现分段错误【英文标题】:Segmentationfaultwhenaddingapointertoanarray【发布时间】:2013-04-0618:43:38【问题描述】:我创建了两个班级,班级和学生。在Class构造函数中,我需要动态初始化一个指向Student对象的... 查看详情

在 C++ 中使用指针的数组:访问返回的数组时出现分段错误

】在C++中使用指针的数组:访问返回的数组时出现分段错误【英文标题】:arraysusingpointersinc++:segmentationfaultwhenaccessingthereturnedarray【发布时间】:2016-11-2817:06:12【问题描述】:我是C++新手,我正在尝试使用指向指针的指针构建一... 查看详情

使用/指针创建 3D 数组时出现分段错误(核心转储)

】使用/指针创建3D数组时出现分段错误(核心转储)【英文标题】:SegmentationFault(CoredDumped)WhenCreating3DArrayw/Pointers【发布时间】:2014-01-2502:44:29【问题描述】:提前感谢您的帮助!我目前正在阅读AlexAlllain的“JumpingintoC++”,到目... 查看详情

将指向数组的指针传递给函数时出现分段错误(C++)

】将指向数组的指针传递给函数时出现分段错误(C++)【英文标题】:Segmentationfaultwhenpassingapointertoanarrayintoafunction(C++)【发布时间】:2016-11-2109:12:55【问题描述】:我正在尝试获取大量随机数,然后将该数组传递给一个函数,该... 查看详情

结构中指向数组的 cudaFree 指针上的 CUDA 分段错误

】结构中指向数组的cudaFree指针上的CUDA分段错误【英文标题】:CUDASegmentationfaultoncudaFreepointertoarrayinstruct【发布时间】:2021-05-2220:44:05【问题描述】:我在CUDA设备上得到了一个结构,它包含一个指向数组的指针。计算、访问元素... 查看详情

分段错误而不是显示消息 - 使用 c 中的指针从文件中读取

】分段错误而不是显示消息-使用c中的指针从文件中读取【英文标题】:Segmentationfaultinsteadofshowingmessage-readingfromafilebyusingpointersinc【发布时间】:2020-04-1919:32:14【问题描述】:我写了一个程序,它从一个文件中读取。我使用打印... 查看详情

滥用指针会产生分段错误。我仍然不确定如何纠正它

】滥用指针会产生分段错误。我仍然不确定如何纠正它【英文标题】:Misuseofapointerisproducingasegmentationfault.I\'mstillnotsurehowtocorrectitthough【发布时间】:2020-05-3000:48:28【问题描述】:阅读后,我觉得我明白这里出了什么问题,但我... 查看详情

分段错误将指针传递给函数

】分段错误将指针传递给函数【英文标题】:segmentationfaultpassingpointertofunction【发布时间】:2017-10-3113:20:52【问题描述】:因此,从parseEther方法调用parseIP函数时会发生分段错误。我真的不知道为什么会出现分段错误,我只是在... 查看详情

使用指针的分段错误

】使用指针的分段错误【英文标题】:Segmentationfaultusingpointers【发布时间】:2020-12-0806:41:25【问题描述】:嗨,我正在为表示为树的堆编写一些函数。我的节点是一个结构:template<typenameObject>structNodeNode*parent=nullptr;Objectname;N... 查看详情

来自 for 循环的分段错误

...C代码,我正在更新为C++。我已将所有数组(指向数组的指针)更改为向量。此代码涉及多个文件。相关部分如下。当我运行它时,我在第一次迭代计算fn.cpp中的m[i]时得到一个SegmentationFault错误。如果我在语句之外定义m,在它减... 查看详情

使用指向指针 C++ 的指针时出现分段错误

】使用指向指针C++的指针时出现分段错误【英文标题】:segmentationfaultwhenusingpointertopointerC++【发布时间】:2015-11-0920:29:49【问题描述】:我一直在尝试使用指向指针的指针来执行类似于树中的中序遍历的操作。这是我的代码struct... 查看详情

全局指针导致分段错误?

】全局指针导致分段错误?【英文标题】:Globalpointerscausesegmentationfault?【发布时间】:2010-07-1123:20:36【问题描述】:gcc编译后运行时,代码诠释*p;intmain()*p=1;导致分段错误。显然,内存位置p中包含的内容无法写入。为什么??... 查看详情

在 C 中创建大型数组时出现分段错误

...数列表进行排序(仍然无法正常工作……我认为这是我将指针传递给函数的方式)列出一百万长的 查看详情

打印指针会导致分段错误

】打印指针会导致分段错误【英文标题】:Printingapointercausesasegmentationfault【发布时间】:2018-01-1823:06:04【问题描述】:在我的程序中,我在一个类的函数中有这两行:char*chunkToReturn=nullptr;std::cout<<chunkToReturn<<std::endl;但... 查看详情

c ++分段错误将指针传递给函数

】c++分段错误将指针传递给函数【英文标题】:c++SegmentationFaultpassinginpointertofunction【发布时间】:2013-04-2821:28:48【问题描述】:我正在编写代码来用图像文件中的数据填充纹理类。据我所知,代码和实现是有效的,但是在进入... 查看详情

返回指针时出现分段错误[关闭]

】返回指针时出现分段错误[关闭]【英文标题】:Segmentationfaultwhilereturningapointer[closed]【发布时间】:2016-07-1318:56:16【问题描述】:所以这是将新元素插入到链表中的代码。它需要第一个节点的地址和要插入的整数数据。但是当... 查看详情

尝试从方法返回指向对象的指针时出现分段错误

】尝试从方法返回指向对象的指针时出现分段错误【英文标题】:Segmentationfaultwhiletryingtoreturnapointertoobjectfromamethod【发布时间】:2016-06-0611:06:21【问题描述】:g++在我尝试从classA的方法返回classB的对象时抛出“分段错误”。我不... 查看详情