我正在把玩数组作为指针。
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string *myarray[20];
*myarray[0]="Ich denke sein";
*myarray[1]="Ich sehe sein";
cout<<*myarray[0]<<endl;
cout<<*myarray[1]<<endl;
return 0;
}
上面的代码编译通过了,但是在执行的时候,出现了错误,程序挂了。当我使用visual studio调试时,它说内存分配错误。这里的错误是什么? 据我所知,我正在处理到处都是指针引用的值。
最佳答案
你已经分配了一个包含 20 个字符串指针的数组。但是您还没有为指针指向的内容分配任何内存。而不是追求这个并使用new
为字符串分配内存,最好为数组中的字符串本身分配内存,你会没事的。
string myarray[20];
myarray[0]="Ich denke sein";
myarray[1]="Ich sehe sein";
cout<<myarray[0]<<endl;
cout<<myarray[1]<<endl;
为了回应您的评论,要使您的程序按原样 运行,请将指针设置为指向新的 string
对象
myarray[0]=new string("Ich denke sein");
myarray[1]=new string("Ich sehe sein");
程序的其他行保持不变。注意
- 剩余的
myarray[i]
, 对于2<=i && i<20
仍将是垃圾。 (在0
循环中将它们设置为nullptr
或for
会更整洁。) - 你还应该
delete
你分配的对象。 (如果您先清除了其余指针,则可以在整个数组上使用for
循环来执行此操作。) - 正如其他答案所评论的那样,在现代 C++ 中,除非绝对必要,否则最好不要直接使用指针。而且您通常也更喜欢使用
vector
对于数组而不是使用内置类型(在 C++11 中,array
类型可用于您在编译时知道长度的数组)。
关于c++ - 处理指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465135/