다음은 함수 안에 메모리를 재 할당하기 위해 C로 작성된 코드입니다. 나는 이것이 실행 중에 충돌하는 이유와 그것을 수행하는 효율적인 방법을 알고 싶다.함수 내부의이 realloc이 인텔 컴파일러에서 실행되지 않는 이유는 무엇입니까?
evaluate_matrices(int **ptr_kn_row, int **ptr_kn_col, double **ptr_kn_val,
int **ptr_uk_row, int **ptr_uk_col, double **ptr_uk_val)
{
........
/* i,j, and k are calculated */
*ptr_kn_row=(int*)realloc(*ptr_kn_row,k*sizeof(int));
*ptr_kn_col=(int*)realloc(*ptr_kn_col,k*sizeof(int));
*ptr_kn_val=(double*)realloc(*ptr_kn_val,k*sizeof(double));
/* and*/
*ptr_uk_row=(int*)realloc(*ptr_uk_row,j*sizeof(int));
*ptr_uk_col=(int*)realloc(*ptr_uk_col,i*sizeof(int));
*ptr_uk_val=(double*)realloc(*ptr_uk_val,i*sizeof(double));
}
다른 방법은 다음과 같습니다 : 메모리 할당이 실패 할 경우
evaluate_matrices(int **ptr_kn_row, int **ptr_kn_col, double **ptr_kn_val,
int **ptr_uk_row, int **ptr_uk_col, double **ptr_uk_val)
{
int *temp1,*temp2,*temp3,*temp4;
double *temp5,*temp6;
..........
temp1 =(int*)realloc(*ptr_kn_row, k*sizeof(*temp1));
if(temp1){*ptr_kn_row = temp1;}
temp2 =(int*)realloc(*ptr_kn_col, k*sizeof(*temp2));
if(temp2){*ptr_kn_col = temp2;}
temp5 =(double*) realloc(*ptr_kn_val, k*sizeof(*temp5));
if(temp5){*ptr_kn_val = temp5;}
......
temp3 = (int*)realloc(*ptr_uk_row, j*sizeof(*temp3));
if(temp3){*ptr_uk_row = temp3;}
temp4 = (int*)realloc(*ptr_uk_col, i*sizeof(*temp4));
if(temp4){*ptr_uk_col = temp4;}
temp6 = (double*)realloc(*ptr_uk_val, i*sizeof(*temp6));
if(temp6){*ptr_uk_val = temp6;}
}
C 또는 C++을 쓰고 있습니까? C++을 쓰고 있다면 왜 처음에는'realloc()'을 사용하고 있습니까? 질문에 C가 명시 적으로 언급되어 있습니다. 좋은 질문입니다. C 및 C++로 태그 질문을 이중으로 사용하지 마십시오. 사람들을 화나게합니다 (C++에 대한 정답은 대개 C와 전혀 관련이 없기 때문입니다). –
@JonathanLeffler, 그 반대 : – chris
어떤 방법으로 이것이 "실행에 실패"합니까? 진단용'printf' 호출을 삽입하고 문제를 보여주는 출력을 보여줄 수 있습니까? i, j 및 k는 어떤 종류의 값 (크기의 순서)을 취합니까? – pmdj