【问题标题】:Using memory allocated pointer inside the function在函数内部使用内存分配指针
【发布时间】:2017-12-13 01:13:52
【问题描述】:

我已经创建了指针,并为它分配了内存。这个内存应该包含我在数组样式中传递的数字(1 个数字 = 1 个元素),此外,0 元素是数字的大小。但是,我面临着使用指针更改分配内存中数据的问题。如果我在主函数中使用我的代码,一切都很完美,但是当我创建另一个函数并在内部传递一个指针值时,我无法将其保存回来(如果数字大于 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;
}

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

【问题讨论】:

标签: c function pointers dynamic-memory-allocation


【解决方案1】:

您的重新分配无法在您对convertNum 的函数调用中继续存在。请参阅 C-Faq 中的此主题:

Pointer to pointer clarification

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

【讨论】:

  • 谢谢,我已更改为“int convertNum(int num, int **convNumber)”和“convertNum(num, &convNum)”。然后我尝试了“convNumber[i] = temp % 10;”在函数内部,正如我在指向指针信息的指针处发现的那样。但是,它将所有内容保存到“convNumber”,而不是“convNum”。如果我正在尝试“*convNumber[i] = temp % 10;”它会导致分段错误。请指教。谢谢。
  • @MatthewDarens 好的,等等。不要尝试在评论中发布另一个问题。花时间吸收新信息。也许阅读更多关于指针的内容。然后,发布另一个问题。我们会尽力帮助您。我们不会为您编写代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2010-09-30
  • 2016-02-09
  • 2021-06-22
  • 2015-04-21
  • 2013-05-31
相关资源
最近更新 更多