【问题标题】:2D array of char pointers --> Segmentation fault?char 指针的二维数组 --> 分段错误?
【发布时间】:2011-10-12 01:34:15
【问题描述】:

我必须创建一个 char 指针的二维数组。该数组将存储姓名和姓氏的列表 - 第 0 行将保存姓名,第 1 行将保存姓氏。这是我目前写的代码(这个文件包含在主文件中):

#include "myFunction.h"
#include <iostream>
#include <string.h>

using namespace std;

char ***persons;

void createArray(int n)
{
   *persons = new char * int[n];
   for(int i=0; i<n; i++)
      *persons[i]=new char[n];
}

main 调用这个函数:

createArray(3);

但是当我运行它时,我不断收到“分段错误”,我不知道为什么

我该如何解决这个问题?

【问题讨论】:

  • *persons 将导致第一个 segv。
  • 您正在创建一个指向二维字符数组的指针,这与二维字符指针数组完全不同(真的!)。你要哪个?

标签: c++ pointers char segmentation-fault new-operator


【解决方案1】:

如果您使用的是 c++,请考虑使用 std::string 的二维数组,因为它会更简洁一些。此外,使用多维数组总是很糟糕,因为它们使代码不可读并导致很多混乱(因为您不会经常对哪个维度代表什么感到困惑)。因此,我强烈建议您考虑为每个人使用一个结构(包含 2 个字段,first_name 和 last_name)。

无论如何,如果你想采用你的方法,你会这样做:

char*** people;

int n = 2;  // two elements, name and surname
int m = 5;  // number of people

people = new char**[m];
for (int i = 0; i < m; i++) {
  people[i] = new char*[n];
}

【讨论】:

  • 哦,我的话它奏效了!太感谢了!我整天都在努力解决这个问题!
【解决方案2】:

我应该评论说,听起来您应该使用结构数组,而不是多维数组,其中包含名字和姓氏的成员。

【讨论】:

  • 这不能回答问题!!他问的是分段错误,而不是他应该如何设计它。
【解决方案3】:

不要使指针全局化。 我对这条线感到尴尬......

*persons = new char * int[n];

我认为这是不对的。 '*' 在这里是额外的。或许,是吧?

persons = new char * int[n];

但我并不确切知道。

【讨论】:

  • 甚至... people = new char *[n]
猜你喜欢
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2021-07-09
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多