在函数

时间:2017-07-09 03:48:34

标签: c function pointers dynamic-memory-allocation

我已经创建了指针,并为其分配了内存。这个内存应该包含我在数组样式中传递的数字(1个数字= 1个元素),0元素是数字的大小。但是,我正面临使用指针更改分配的内存中的数据的问题。如果我在main函数中使用我的代码,一切都很完美,但是当我创建另一个函数并在其中传递指针值时,我无法将其保存(如果数字大于99999并且需要要存储的6个元素)。

主要功能:

int *convNum=NULL;

int main() {
int num;
convNum = malloc(sizeof(int));
if (convNum==NULL){
    printf("Allocation error\n");
    exit(0);
}

scanf("%d", &num);
convNum[0] = numLength(num);
printf("%d\n", convNum[0]);
convertNum(num, convNum);

for (int i = 1; i<=convNum[0]; i++){
    printf("%d", convNum[i]);
}

printf("\n");

return 0;
}

我尝试使用的功能

int convertNum(int num, int * convNum){
int temp = num;
int size = convNum[0];
convNum = realloc(convNum, sizeof(int)*(size+1));
if (convNum==NULL){
    printf("Allocation error\n");
    exit(0);
}
for (int i=size;i>0;i--){
    convNum[i] = temp % 10;
    temp = temp / 10;
}
return 0;
}

EDITED 数字大小小于6的输出给出了我需要的结果。带有其他数字的输出给了我破碎的大小(类似于-10349945820)并且没有正确的结果。

1 个答案:

答案 0 :(得分:0)

您的重新分配无法在您convertNum的函数调用中幸存。请参阅C-Faq中的这个主题:

Pointer to pointer clarification

您应该通过引用传递convNum指针。