C++ 指针数组始终在索引C++;

C++ 指针数组始终在索引C++;,c++,arrays,pointers,C++,Arrays,Pointers,算法h #ifndef _algorithm_ #define _algorithm_ namespace Sorting{ int *bubble(int *dataPass, int dataSize); } #endif 算法cpp #include "algorithm.h" int *Sorting::bubble(int *dataPass, int dataSize){ for(int i = 0; i < dataSize; i++){ for(in

算法h

#ifndef _algorithm_
#define _algorithm_

namespace Sorting{
  int *bubble(int *dataPass, int dataSize);
}

#endif
算法cpp

#include "algorithm.h"

int *Sorting::bubble(int *dataPass, int dataSize){
  for(int i = 0; i < dataSize; i++){
    for(int j = 0; j < dataSize; j++){
      cout<<dataPass[j+1]<<" < "<<dataPass[j]<<endl;
      if(dataPass[j+1] < dataPass[j]){
        int tmp = dataPass[j];
        dataPass[j] = dataPass[j+1];
        dataPass[j+1] = tmp;
      }
    }
  }
  return dataPass;
}
#包括“algorithm.h”
int*排序::气泡(int*dataPass,int dataSize){
对于(int i=0;icout问题在于您的内部循环。您正在比较元素
j
j+1
,因此,如果dataSize为10,例如,当
j
为9(可能是最后一个值)时,您正在查看数组中的元素9和10,但是
dataPass[10]
超出了数组的界限。这是一个简单的修复方法,只需将循环更改为此

for(int j = 0; j < dataSize-1; j++)
for(int j=0;j
您使用的是两个循环,因此会导致错误。大小和索引定义不正确。请注意数组中的大小和索引

for(int i = 0; i < dataSize; i++){
    for(int j = 0; j < dataSize-1; j++){
      if(dataPass[j+1] < dataPass[j]){
        int tmp = dataPass[j];
        dataPass[j] = dataPass[j+1];
        dataPass[j+1] = tmp;
      }
    }
for(int i=0;i
解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该[编辑]您的问题包括一个重现您的问题的示例,以及您在调试器中所做的观察。在数组索引时要更加小心。只需一点提示:如果
j=dataSize-1
,数组索引的哪个元素将指向?除了您的实际问题之外,还有几件事:首先,您确实ant使用std::vector.As在vector Sorting::bubble(常量向量和数据)中第二,您知道您实际上从外部更改了一个变量?dataPass指针实际上访问了函数外部的某个变量,即它所指向的那个变量?虽然欢迎使用此代码片段,并可能提供一些帮助,但这将是解决问题的方法和原因。请记住,您正在回答这个问题为将来的读者,而不仅仅是现在提问的人提供信息!请在回答中添加解释,并说明适用的限制和假设。