2013-03-02 2 views
0

Я пишу программу на C, где у меня есть два массива 2d, например arr1 & arr2. Мне нужно удалить определенную строку из arr1 и добавить ее в arr2. Поэтому я использовал realloc для динамического увеличения размера arr2 на 1 и скопировал содержимое этой строки arr1 в эту вновь созданную строку arr2.Уменьшение размера 2D-массива и удаление определенной строки из него

Но моя проблема в том, что я не могу уменьшить размер arr1 и удалить из него определенную строку, используя realloc. Может ли кто-нибудь помочь мне с кодом C, который можно использовать для динамического уменьшения размера массива 2d (используя realloc или что-то еще) и удалить из него определенную строку (используя индекс этой строки)?

Сначала я создал две матрицы, как этот

a_seq=(float **)malloc(count1*sizeof(float*)); 
for(i=0;i<count1;i++) 
    a_seq[i]=(float *)malloc(n*sizeof(float)); 

Затем я выполнил realloc на 2-й матрице после увеличения его размера на 1 по

a_full=(float **)realloc(a_full,count2*sizeof(float *)); 
a_full[count2-1]=(float *)malloc(n*sizeof(float)); 
for(s=0;s<n;s++) 
    a_full[count2-1][s]=a_seq[p][s];  

р является индексом строки для удаления из a_seq.Мой вопрос заключается в том, что я могу применить ту же концепцию realloc, чтобы уменьшить размер матрицы a_seq и удалить указанную строку?

+0

Можете ли вы опубликовать код, который у вас есть прямо сейчас? – charliehorse55

ответ

1

Я предполагаю, что вы будете выделять память для вашего 2d массива в следующем виде:

int * arr = malloc(sizeof(int)*r*c); 

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

int * arr[r]; /*Declaring an array of pointers*/ 
/*Allocating memory row by row*/ 
for(i=0; i<r; i++)  arr[i] = malloc(sizeof(int)*c); 

.... 

/*Row denotes the row to be deleted*/ 
free(arr[row]); 
for(i=row; i<r-1; i++) arr[i] = arr[i+1]; 

Таким образом, у вас есть только дополнительный указатель, оставшийся от выделения массива указателей. Строка, которую вы хотите удалить, будет успешно удалена.

+0

Сначала я создал две такие матрицы: a_seq = (float **) malloc (count1 * sizeof (float *)); для (i = 0; i

+0

@C_beginner Отправьте код в самом вопросе. Вы можете отредактировать вопрос в любой момент времени. – asheeshr

Смежные вопросы