【发布时间】:2021-06-30 13:28:44
【问题描述】:
我正在尝试使用 malloc 学习 C 中的内存分配,并在函数内使用 realloc 增加分配数组的大小。我遇到了这个。当我使用单个变量时,代码运行良好。但是当我为第二个变量分配内存时,它给了我奇怪的输出。
代码如下:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
# define N 3
void padd(int *a){
int sizes = 10*sizeof(int);
a = (void *)realloc(a,sizes);
a[0] = 10;
printf("inside func= %d \n",a[0]);
}
int main()
{
int *d;
int *pA;
int size = N*sizeof(int);
pA = (void *)malloc(size);
//d = (int *)malloc(size);
padd(pA);
printf("outside func= %d",pA[0]);
}
它给了我输出:
inside func= 10
outside func= 10
但是如果我取消注释 //d = (int *)malloc(size);行,它给了我
inside func= 10
outside func= -1368048824
作为输出。
这里可能有什么问题?
【问题讨论】:
-
a仅在本地更改。函数返回后realloc()的结果丢失。 -
好的!有没有正确的方法来增加函数内 pA 的大小?我是 C 的新手。:)
-
使用指向该指针的指针并赋值,或者返回使用
realloc()获得的指针并将其赋值回原来的指针。 -
realloc(a, sizes)可能会在增加分配的大小时返回原始的a,但这不是必须的。它也可以在失败时返回NULL。如果realloc()成功(不返回NULL)并返回原始a,您的代码只会按预期运行 -
一般来说,你不应该转换
mallocstackoverflow.com/questions/605845/…的结果
标签: c malloc pass-by-reference dynamic-memory-allocation realloc