LINUX.ORG.RU

пожалуйста, помогите с указателями


0

0

не понимаю как выделять память под двумерный массив, например массив
строк.

char **Strings;
Strings=new char*; //в массиве 1 указатель на строку
Strings[0]=new char[256]; //выделяем память под первую строку
strcpy(Strings[0],"vasya"); //
printf("%s\n",Strings[0]); //
Strings=new char*; //в массиве 2 указателя на строку
Strings[1]=new char[256]; //выделяем память под вторую строку
strcpy(Strings[1],"vasya"); //
printf("%s\n",Strings[1]); //

Это вылетает на printf. Я ничего не понимаю, объясните, пожалуйста,
что здесь неправильно.

anonymous

Ответ на: комментарий от anonymous

не подойдет. нет такого оператора delete[][], надо вначале удалить память на которую указывают указатели из массива, а потом сам массив указателей.

HTH

anonymous
()

Ответ: пожалуйста, помогите с указателями

Короче, неправильно ты творишь.. Надо то вот так..

#include <string.h> #include <stdio.h>

int main(void) { int x = 2; char **strings;

// создание массива указателей размерностью x strings = new char*[x];

for (int i = 0;i < x;i++) strings[i] = new char[100]; // каждый указатель делаешь указателем на новую строку из 100 симв.

// и делаешь с ними всё, что хочешь... strcpy(strings[0], "hello"); printf("%s", strings[0]);

// потом убиваешь по отдельности массивы char' ов // (при убийстве массива перед его именем ставится []) for (i = 0;i < x;i++) delete [] strings[i];

// потом удаляешь массив указателей с тем же правилом delete [] strings;

return 0; }

anonymous
()

Ответ: пожалуйста, помогите с указателями

Короче, неправильно ты творишь..
Надо то вот так..

#include <string.h>
#include <stdio.h>

int main(void)
{
int x = 2;
char **strings;

// создание массива указателей размерностью x
strings = new char*[x];

for (int i = 0;i < x;i++)
strings[i] = new char[100]; // каждый указатель делаешь указателем на новую строку из 100 симв.

// и делаешь с ними всё, что хочешь...
strcpy(strings[0], "hello");
printf("%s", strings[0]);

// потом убиваешь по отдельности массивы char' ов
// (при убийстве массива перед его именем ставится [])
for (i = 0;i < x;i++)
delete [] strings[i];

// потом удаляешь массив указателей с тем же правилом
delete [] strings;

return 0;
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.