Nano Hash - криптовалюты, майнинг, программирование

2D-массив указателей символов --> Ошибка сегментации?

Мне нужно создать двумерный массив указателей на символы. Массив будет хранить список имен и фамилий — строка 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. 24.07.2011
  • Вы создаете указатель на двумерный массив символов, что-то совершенно отличное от двумерного массива указателей на символы (действительно!). Какой ты хочешь? 24.07.2011

Ответы:


1

Если вы используете С++, рассмотрите возможность использования двумерного массива std::string, так как это будет немного чище. Кроме того, с многомерными массивами всегда ужасно работать, поскольку они делают код нечитаемым и вызывают много хаоса (поскольку вы не часто путаетесь в том, какое измерение представляет что). Итак, я настоятельно рекомендую вам рассмотреть возможность использования структуры для каждого человека (с двумя полями, 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];
}
24.07.2011
  • о, честное слово, это сработало! большое спасибо! я пытался исправить это весь день! 24.07.2011

  • 2

    Не делайте указатели глобальными. И мне стыдно за эту строчку...

    *persons = new char * int[n];
    

    Я не думаю, что это правильно. '*' здесь лишнее. Может быть, это правильно?

    persons = new char * int[n];
    

    Но я точно не знаю.

    24.07.2011
  • Или даже... person = new char *[n] 24.07.2011

  • 3

    Я должен прокомментировать, что вместо многомерного массива, похоже, вы должны использовать массив структур с членами для имени и фамилии.

    24.07.2011
  • Это не ответ на вопрос!! Он спросил об ошибке сегментации, а не о том, как он должен ее спроектировать. 24.07.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..