Премини към съдържанието
RandomGuy

Динамично заделяне на памет на двумерен масив във функция

Препоръчан отговор


Здравейте, имам малък проблем(по-скоро дупка в знанията) със заделянето на памет в С. 

Имам следният фрагмент от код(Извикването на  func  във func2  е реалния сценарий и исках да съм максимално достоверен).

#include<stdio.h>
#include<stdlib.h> 


void func(int** array)
{
    int i;
    array= (int **)malloc(5 * sizeof(int *));
    for (i=0; i<5; i++)
    { 
        array = (int *)malloc(5* sizeof(int)); 
    }
    array[0][0] = 1;
        printf("%d \n",array[0][0]);
}
void func1(int** array)
{
    func(array);
}
int main()
{
    int** arr;
    func1(arr);
    printf("%d \n",arr[0][0]);  //грешка
}

 

И при изпълнението на принта в майна получавам segmentation fault. Знам защо я дава, защото няма такъв елемент в масива. Въпросът ми е как да го направя да работи по този начин(да променям размера на масива във функцията и да го пълня с данни) или нямам как да стане което не вярвам. Благодаря предварително за отговорите.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Разбира се, че може в Ц всичко е възможно.

Такаа 

func1(arr);

трябва да стане

func1(&arr);
void func1(int** array)

трябва да стане

void func1(int*** array)
void func(int** array)

също става

void func(int*** array)

и последно

    *array = malloc(5 * sizeof(**array));
    for ( i = 0 ; i < 5 ; i++ ) { 
                       
        array[0][i] = malloc(5 * sizeof(***array)); 
    }

Много звезди много нещо дано не съм го объркал, че малко бързах

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване