c++ - 处理指针数组

标签 c++ arrays pointers

我正在把玩数组作为指针。

#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 循环中将它们设置为 nullptrfor 会更整洁。)
  • 你还应该delete你分配的对象。 (如果您先清除了其余指针,则可以在整个数组上使用 for 循环来执行此操作。)
  • 正如其他答案所评论的那样,在现代 C++ 中,除非绝对必要,否则最好不要直接使用指针。而且您通常也更喜欢使用 vector对于数组而不是使用内置类型(在 C++11 中,array 类型可用于您在编译时知道长度的数组)。

关于c++ - 处理指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465135/

相关文章:

c++ - 如何在实时流应用程序上使用 mpi?

javascript - 合并存在于可用键对象中的 2 个数组,删除对象的特定属性

c - 尝试使用指针进行比较时抛出异常

c - 我试图从函数返回一个指针?但我无法取回该指定地址的值(value)

c - 在函数中将数组声明为静态的目的是什么?

c++ - 无尽的包含循环

c++ - 静态分析检查未能发现琐碎的 C++ 问题

c++ - 如何使用常量引用访问 vector<int*> 的元素?

java - 如何知道一个数字在数组中出现的频率

Javascript:2 个具有相同 "weight"的数组