Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Вероника99
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 461
#1

Что делать при сопротивлении памяти? - C++

18.11.2016, 00:49. Просмотров 179. Ответов 6
Метки нет (Все метки)

Здравствуйте. Такая ситуация: выделяю память под два двумерных массива
C++
1
2
 char** L=(char**)malloc(sizeof(char )*nL);
 char** R=(char**)malloc(sizeof(char )*nR);
Циклично выделяю память для каждого элемента:
C++
1
2
3
4
5
6
7
8
9
10
11
 for(i=0;i<nL;i++)
    {
    
   L[i]=(char*)malloc(sizeof(arr[low+i]));
     strcpy(L[i],arr[low+i]);
    }
  for(i=0;i<nR;i++)
    {   
    R[i]=(char*)malloc(sizeof(arr[mid+i+1]));
  strcpy(R[i],arr[mid+i+1]);
    }
При выделении памяти в цикле выбивает из программы, попробовала закомментировать выделение память в цикле для L, вылетать перестало. Что это значит?Нехватка памяти или что?

Добавлено через 9 минут
Вся функция на всякий случай
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void Merge(char* arr[],int low,int mid,int high) //Merging the Array Function
{
    int nL= mid-low+1;
    int nR= high-mid;
    
 char** L=(char**)malloc(sizeof(char* )*nL);
 char** R=(char**)malloc(sizeof(char *)*nR);
    int a=sizeof(char )*nL;
    int b=sizeof(char )*nR;
    
    int i;
    for(i=0;i<nL;i++)
    {
    //  L[i]=new char[sizeof(arr[low+i])];
      L[i]=(char*)malloc(sizeof(arr[low+i]));
   strcpy(L[i],arr[low+i]);
    }
  for(i=0;i<nR;i++)
    {
    //  R[i]=new char[sizeof(arr[mid+i+1])];
    R[i]=(char*)malloc(sizeof(arr[mid+i+1]));
      strcpy(R[i],arr[mid+i+1]);
    }
   /* int j=0,k;
    i=0;
    k=low;
    while(i<nL&&j<nR)
    {
        if(strcmp(L[i],R[j])<0)strcpy(arr[k++],L[i++]);
        else strcpy(arr[k++],R[j++]);
    }
    while(i<nL)strcpy(arr[k++],L[i++]);
    while(j<nR)strcpy(arr[k++],R[j++]);*/
 
}
Отзовитесь кто-нибудь,на завтра нужно(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2016, 00:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что делать при сопротивлении памяти? (C++):

подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать
Вывод В выходной файл выведите одно число - сколько ударов сделали часы за...

Что делать с утечками памяти?
С этими утечками памяти в C++ просто беда. Посоветуйте, что можно сделать?...

Ребят Незнаю что делать при запуске на компилирование выдает ошибку.Кто понимает что не так скажите а если не затруднит исправьте ошибку
Разговаривал с двумя преподами говорят что проект не правильно создавал,хотя...

Программа для расчета силы тока при введенных напряжении (u) и сопротивлении (r)
Создайте приложение Windows Forms для расчета силы тока при введенных...

Выводится случайное значение переменной у при х=-3. Что делать?
Задание: Вычислить и вывести на экран таблицу функции y=f(x) в интервале с...

При запуске выдает expression stream !=null; что делать?
задача такая: написать прогу, которая будет решать систему линейных уравнений...

6
Renji
2142 / 1501 / 457
Регистрация: 05.06.2014
Сообщений: 4,339
18.11.2016, 01:12 #2
sizeof(arr[low+i]) считает размер указателя на массив, а не размер массива (который вы в данном случае не узнаете никак). Так как строчка массива у вас вряд ли равна 4-8 байтам, памяти выделяется недостаточно и strcpy что-то там затирает.
0
Вероника99
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 461
18.11.2016, 01:18  [ТС] #3
Пока вроде проблема решилась передачей такого же массива в саму функцию,с таким же выделением памяти. Подскажите, пожалуйста, у меня голова уже вообще не соображает,мне нужно массиву строк sorted присвоить слова из массива arr, опять таки,выбивает из программы. Проблема в последнем цикле,как поступить?Мне требуется именно двумерному массиву присвоить значения из arr.Спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 int size;  //This is the String array size
    scanf("%d",&size);
    char** arr=(char**) malloc(sizeof(char *)* size); //Creating required string array
    printf("\nEnter the strings of the array: ");
 
    int i;
    for(i=0;i<size;i++)
    {
        arr[i]=(char*)malloc(sizeof(char)*MAXLENGTH);
        printf("\nEnter String: ");
        scanf("%s",arr[i]);
    }
 
    char sorted[SIZE][MAXLENGTH]; 
  int k; 
  char *j; 
 
  for (int i = 0; i < SIZE; i++) { 
   for (j = arr[i], k = 0; *j != '\0', k < MAXLENGTH; j++, k++) 
  //  sorted[i][k] = *j; 
  strcpy( sorted[i],j);
  }
0
Kant
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
18.11.2016, 01:28 #4
Память сопротивляется ахах лол
0
Вероника99
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 461
18.11.2016, 01:34  [ТС] #5
Надо было как-то привлечь внимание)

Добавлено через 5 минут
Поэлементно тоже не хочет присваиваться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
     int size;  //This is the String array size
    scanf("%d",&size);
    char** arr=(char**) malloc(sizeof(char *)* size); //Creating required string array
    printf("\nEnter the strings of the array: ");
 
    int i;
    for(i=0;i<size;i++)
    {
        arr[i]=(char*)malloc(sizeof(char)*MAXLENGTH);
        printf("\nEnter String: ");
        scanf("%s",arr[i]);
    }
 
    char sorted[SIZE][MAXLENGTH]; 
  int k; 
  char *j=arr[0]; 
 
  for (int i = 0; i < SIZE; i++) { 
     for (int k = 0; k <MAXLENGTH; k++) 
  // for (k = 0,j; j != '\0', k < MAXLENGTH; j++, k++) 
   sorted[i][k] = arr[i][k]; 
//  strcpy( sorted[i],arr[i]);
  }
0
Renji
2142 / 1501 / 457
Регистрация: 05.06.2014
Сообщений: 4,339
18.11.2016, 02:24 #6
SIZE не равно size.
for (int i = 0; i < SIZE; i++) for (int i = 0; i < size; i++)
0
Kant
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
18.11.2016, 03:25 #7
Какую задачу решаешь? Не вчитывался, что у тебя.

Если верно понял, то нужно просто скопировать массив слов из одного массива в другой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char **Copy(char **in, int words) {
  char **out = (char **) malloc(words + 1);
  for (int i = 0; i < words; ++i) {
    int sizeWord = strlen(in[i]);
    out[i] = (char *) malloc(sizeWord + 1);
    strcpy(out[i], in[i]);
  }
  return out;
}
 
void PrintWords(char **in, int words) {
  for (int i = 0; i < words; ++i) {
    printf("%s\n", in[i]);
  }
 
}
 
int main(int argc, char *argv[]) {
  int countWords = 2;
  printf("Введите кол-во слов: ");
  scanf("%d", &countWords);
 
  char **words = (char **) malloc(sizeof(char *) * countWords);
  if (words != NULL) {
    for (int i = 0; i < countWords; ++i) {
      char word[256];
      printf("Введите слово:\n");
      scanf("%s", word);
 
      int sizeWord = strlen(word);
      words[i] = (char *) malloc(sizeWord + 1);
      if (words[i] != 0) {
        strcpy(words[i], word);
      }
    }
  }
 
  PrintWords(words, countWords);
 
  char **copyWords = Copy(words, countWords);
  PrintWords(copyWords, countWords);
 
  for (int i = 0; i < countWords; ++i) {
    free(words[i]);
    free(copyWords[i]);
  }
 
  free(words);
  free(copyWords);
 
  return 0;
 
}
0
18.11.2016, 03:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 03:25
Привет! Вот еще темы с решениями:

Приложение Windows Forms для расчета силы тока при введенных напряжении и сопротивлении
Создайте приложение Windows Forms для расчета силы тока при введенных...

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

Что делать если нужно знести информацию в 2 разных объекта базового класса при закрытом наследование
Что делать если нужно знести информацию в 2 разных объекта базового класса при...

Что происходит за кулисами при выделении памяти для переменной?
Здравствуйте, уважаемые форумчане! У меня такой вопрос: &quot;Что происходит, когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru