2017-11-26 2 views
1

동적으로 할당 된 배열과 배열의 마지막 요소 위치를 나타내는 aktmax의 두 변수가 있다고 가정합니다. 배열 각각. 두 개의 함수도 작성해야하므로 첫 번째 요소가 배열에 새 요소를 추가하고 충분한 공간이 없으면 배열을 배가 된 공간에 다시 할당합니다. 두 번째 기능은 어레이에 새로운 요소를 삽입하지만 배열을 재 할당하는, 그 크기는 하나의 내 코드 place.so 의해 크게되도록 그렇게 진행 :구조체 내에 동적으로 할당 된 배열을 인쇄 할 때 정의되지 않은 동작

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

struct DynArray 
{ 
    int *p, max, akt = 0; 
}; 
struct DynArrayMin 
{ 
    int *p, max, akt = 0; 
}; 
void dyn_arr_add(struct DynArray* d, int x) 
{ 
    if ((d->akt)>(d->max) - 1) 
    { 
     d->p = (int*)realloc(d->p, (d->max) * 2); 
     d->max *= 2; 
    } 
    d->p[d->akt] = x; 
    d->akt++; 
} 
void dyn_arr_min_add (struct DynArrayMin* d, int x) 
{ 
    if ((d->akt)>(d->max) - 1) 
    { 
     d->p = (int*)realloc(d->p, (d->max) + 1); 
     d->max++; 
    } 
    d->p[d->akt] = x; 
    d->akt++; 
} 
void main() 
{ 
    DynArray d; 
    DynArrayMin e; 
    int n, l, x,aa=0; 
    scanf("%d", &n); 
    d.max = n; 
    d.p = (int*)malloc(sizeof(int)*n); 
    e.max = n; 
    e.p = (int*)malloc(sizeof(int)*n); 
    do{ 
     printf("enter number\n"); 
     scanf("%d", &x); 
     dyn_arr_add(&d, x); 
     dyn_arr_min_add(&e, x); 
     aa++; 
     printf("want to enter another number; 0=no\n"); 
     scanf("%d", &l); 
    } while (l != 0); 
    for (int i = 0; i < aa;i++) 
    printf("%d%d\n", d.p[i], e.p[i]); 
    free(e.p); 
    free(d.p); 
    system("pause"); 
    return; 
} 

하지만 n = 5로 시작하는 것 동적으로 할당 된 배열의 초기 크기가되고 1에서 8 사이의 숫자를 입력으로 사용하면 다음과 같은 결과가 나왔습니다. 11 22 33 44 55 66 77 88 그러나이 팝업 메시지는 this pop-up message과 그 뒤에 오는 것입니다. 팝업 메시지에서 "계속"을 클릭 한 후 출력을 클릭하십시오. 11 2-842203134 -33751037-33686019 -1414791683-1414812757 -1414812757-1414812757 66 77 88

답변

2

malloc int 수는 realloc 바이트 수입니다.

처음에는 realloc을 호출하면 버퍼가 작아 지지만 크기는 커집니다.

관련 문제