C에서 동적 배열을위한 함수를 만들려고하고 있지만 올바른 방법으로 해결할 수 있을지 확실하지 않습니다. 당신이 나를 도울 수? C의 동적 배열 - 어떻게 작동 시키나요?
array_rows = resizeArray(array_rows,&data);
이 리뷰 및 팁 주셔서 감사합니다 : 배열이 가득
int resizeArray(int array_rows, int **array[])
{
int new_rows = array_rows + 16;
int *pointer;
pointer = realloc(**array, new_rows*sizeof(int));
if (!pointer) {
free(**array);
return 0;
}
**array = pointer;
free(pointer);
return new_rows; // return new rows counter
};
일부 코드 ....
/* first array definition */
int *data;
int array_rows = 16;
data = (int*)malloc(array_rows*sizeof(int));
경우 : 다음은 내 코드입니다.
편집 :
int resizeArray(int array_rows, int **array){
int new_rows = array_rows + 16;
int *pointer;
pointer = realloc(**array, new_rows*sizeof(*pointer));
if (!pointer) {
free(**array);
return 0;
}
**array = pointer;
free(pointer);
return new_rows; // return new rows counter
}
일부 코드 ....
/* first array use */
int *data;
int array_rows = 16;
data = (int*)malloc(array_rows*sizeof(*data));
배열이 가득 차면
:array_rows = resizeArray(array_rows,&data);
편집 - 구조를 갖는 CODE :
struct MyDynamicArray {
int maximumSize = 16;
int length = 0;
int* data;
}
/* first array definition */
MyDynamicArray.data = (int*)malloc(MyDynamicArray.maximumSize*sizeof(int));
int resizeArray(int array_rows, struct MyDynamicArray)
{
int new_rows = MyDynamicArray.maxSize * 2;
int *pointer;
pointer = realloc(MyDynamicArray.data, new_rows*sizeof(int));
if (!pointer) {
free(MyDynamicArray.data);
return 0;
}
MyDynamicArray.maxSize = new_rows; // return new rows counter
};
/* usage */
resizeArray(array_rows,MyDynamicArray);
012 3,516,
WORKING 해결책 :
resizeArray 함수 정의 :
/**
* resize array
* - its size resize X 2
* @param max_length
* @param data
* @return
*/
int resizeArray(int max_length, int **data)
{
data = (int *) realloc(**data, max_length * 2 * sizeof(int));
max_length *= 2;
return max_length; // return new rows counter
}
첫 번째 배열 DEFINITION 여기
int *data_i;
int max_length = 16;
int *data;
data = (int *) realloc((void *) data_i, max_length * sizeof(int));
입니다 사용법 :
나는 희망int i = 0;
for(i = 0; i < 100; i++)
{
data[i] = i;
if(i == max_length)
{
max_length = resizeArray(max_length, &data);
}
}
, 그것은 바로 및에 도움이 될 것입니다 someones 문제를 해결하십시오.
? resizeArray INT (INT array_rows, INT ** 어레이) {} – user1870556
를 sizeof (INT)는 (* 포인터) ...가 더를 sizeof 같음 이후에 변수 유형을 변경할 때 크기가 – Quest
인 항목을 변경할 필요가 없으므로 edit i post와 같아야합니다. – user1870556