내가 물어보고 싶은 것은, 내가 메모리 관리에있어 무엇이 잘못되었는지. 난 그냥 stdin에서 일부 int 배열을 읽고 다음 그것을 인쇄 싶어요. 2 요소에서 시작하여 금액을 2로 할당하면 만족하게 될 것입니다.C에서 realloc()을 잘못 사용하면 어떻게됩니까?
#include <stdio.h>
#include <stdlib.h>
void read (int * array, int * n, int * l) {
int * tmp;
printf("Enter values:\n");
for (*l = 0; *l < *n; (*l)++) {
if (*l == *n - 1) {
(*n) *= 2;
tmp = (int*) realloc (array, sizeof(int) * (*n));
if (tmp != NULL) {
array = tmp;
free(tmp);
}
else {
printf("Error!\n");
free(tmp);
}
if (scanf("%d", &array[*l]) != 1) break;
}
}
void print (int * array, int length) {
int i;
printf("Your values:\n");
for (i = 0; i < length; i++) printf("%d ", array[i]);
}
int main (void) {
int n = 2; /* number of array elements */
int length = 0;
int * array = (int *) malloc(sizeof(int) * n);
read(array, &n, &length);
print(array, length);
free(array);
return 0;
}
'realloc'에 의해 반환 된 값을'main'에 전달하지 않으므로,'main'의 다음 줄은 이전의 해제 된 포인터 값을 사용합니다. –
[Don 'malloc'의 결과를 C로 캐스팅하지 마라. (http://stackoverflow.com/q/605845/995714) –
@Luru Vinh 구조체 블록에 메모리를 할당 할 때를 대비해서 때때로 캐스팅해야한다. malloc이 그것을 이해합니까? –