2017-04-17 65 views
0

就像标题所说,我一直在尝试打印分配给指针的动态分配数组的元素。从那里我试图让它在添加一些元素后打印出数组的元素,但是我得到了甚至不是整数的非常奇怪的字符。这是一些代码。从指针中获取打印动态int数组的奇怪字符

//QS.h 
class QS: public QSInterface { //where the pointer is declared 
private: 
int* quickSort; 

//QS.cpp 

bool QS::createArray(int capacity) { //where the array is created 
if (quickSort != NULL) { 
    //delete [] quickSort; 
} 
quickSort = new int[capacity]; 
arrayCap = capacity; 
arraySize = 0; 
return true; 
} 

bool QS::addToArray(int value) { //elements are added 
if (arraySize >= arrayCap) { 
    return false; 
} 
quickSort = &value; 
++arraySize; 
return true; 

} 

string QS::getArray() const { //where array is "printed" 
string array; 
for (unsigned int i = 0; i < arraySize; ++i) { 
    array += *quickSort + i; 
    array += ", "; 
} 
return array; 
} 

输出我收到的只是无意义的ASCII字符,而不是内存地址。我想我在添加到数组时可能会搞砸了。任何帮助?由于

注* I“具有”使用数组,但也许在别的世界的载体会更好

+1

里面'createArray()',你执行以下语句: 'int arr [capacity]; quickSort = arr;'。在函数结束时,'arr'被破坏,因为它是一个局部变量。因此,quickSort指向垃圾。 – user2296177

+0

哎呀,我完全忘了。这应该使用“新”。让我修复 –

+0

'int arr [capacity];' - 这是无效的C++。数组声明使用常量而不是变量来表示条目的数量。 – PaulMcKenzie

回答

1

当执行这一行(加功能):

quickSort = &value; 

你基本上设置指针QUICKSORT指向参数的存储器地址,并停止在所述第一元件指向您在开始时创建的动态数组。因此,您会错过所有其他元素,并且打印随机存储器数据的整数解释。

写来代替:

quickSort[size] = value; 

将参数的价值添加到分配给您的数组的内存地址,你会想,没有移动指针快速排序

最后,在最后的功能:

array += *quickSort + i; 

可以通过更加整齐取代:

array += quickSort[i]; 

和,只是为了确保从INT转换做得正确

array += to_string(quickSort[i]); 
+0

这解决了它!我想我可能不得不在数组中给它一个位置,但我不知道我可以在我的指针上使用括号'[]'。谢谢! *也是to_string修复的奖励 –

0

“QS :: addToArray”套quickSort指向新的值是堆栈(参数)。它不会向已分配的数组添加任何内容。

一旦分配了数组并将指针存储在quickSort中,则不应以任何方式对其进行更改。你应该存储在内存中的项目指向quickSort为:

bool QS::addToArray(int value) { //elements are added 
    if (arraySize >= arrayCap) { 
     return false; 
    } 
    quickSort[arraySize++] = value; 
    return true; 

} 

编辑:我后来随着QS ::的getArray()*quickSort + i注意到这个问题,但我不打算在这里增加它作为丹尼尔H.写道:关于它的第一。

+0

谢谢!我认为这与@GillBates说的是一样的概念,他的例子为我工作。但这是绝对的问题在添加功能 –

1

你不能只是增加一个intstd::string(我认为这是相关的string无论如何)。如果您查看supported operations,您会发现只能添加字符串,单个字符,C风格的字符串,如{'a', 'b', 'c'}或(从C++的下一个版本开始)string_view s的字符列表。你的int正被转换为其中之一,或者你的代码甚至不会编译。我不记得是否会传达int s到char s或指针,但这两者都不是理想的行为。

要以您想要的方式将int s转换为字符串,一些可能的选项是to_string,各种C函数或string streams

此外,*quickSort + i读为(*quickSort) + i,不*(quicksort + i),让您不断添加iquickSort的第一要素。要访问元素i,首选的方式通常是数组索引,quickSort[i]

+0

随着快速排序是一个指针,使用'quickSort [我]'不起作用。然而,将新元素添加到字符串流中的确行得通,但现在我只是变得疯狂的数字。 –

+0

没关系,结果'quickSort [i]'是有效的,而且实际上更容易理解。我的代码中的其他问题是什么让这看起来不起作用。谢谢! –