2016-09-08 2 views
0

I ein dynamisches Array von ganzen Zahlen haben:Löschen Elemente von dynamischen Arrays in C

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

Wie kann ich effektiv Elemente zwischen 555-565 löschen, ohne dass es neue Array und Kopierelemente zu schaffen?

+0

Kopieren Sie '0-554' und' 566-999' in ein neues Array von '990' Elementen ... Dann geben Sie das alte Array frei. – LPs

+1

Sie können nicht! Sie können Einträge nur in den Bereich verschieben. – Olaf

+1

@LPs: Das würde die Elemente nicht löschen, sondern ein neues Array erstellen. – Olaf

Antwort

2

Könnte dies als Löschung berücksichtigt werden?

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

int main(void) { 
int* array = malloc(sizeof(int)*110); 

for(int i=0; i<100; i++) 
      array[i]=i; 

for (int r=56; r<100; r++) 
     array[r]=array[r+6]; 

//memset(array+94, 0, 5); 
memset(array+94, 0, 5 * sizeof(int)); 

} 
+1

Danke, ich vermisse es. –

2

Sie können es die folgende Art und Weise tun

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

int main() 
{ 
    size_t N = 1000; 
    int *a = malloc(N * sizeof(int)); 

    for (size_t i = 0; i < N; ++i) a[i] = i; 

    size_t n1 = 555, n2 = 565; 


    for (size_t i = n1; i < n2 + 1; i++) printf("%d ", a[i]); 
    printf("\n"); 

    memmove(a + n1, a + n2, (N - n2) * sizeof(int)); 

    int *tmp = realloc(a, (N - n2 + n1) * sizeof(int)); 

    if (tmp) a = tmp; 

    for (size_t i = n1; i < n2 + 1; i++) printf("%d ", a[i]); 
    printf("\n"); 

    free(a); 
} 

Die Programmausgabe ist

555 556 557 558 559 560 561 562 563 564 565 
565 566 567 568 569 570 571 572 573 574 565 

Oder Sie können das Array Neuzuteilung einfach vermeiden, indem Sie die aktuelle Anzahl der tatsächlichen Elemente in der Trag Array.

+0

bei 'memmove' und' realloc', ist es nicht die richtige Größe. – BLUEPIXY

+0

@BLUEPIXY Danke. Es ist ein Tippfehler :) –

+0

Es hat immer noch ** Tippfehler **. – BLUEPIXY

Verwandte Themen