C语言学习 动态内存分配


动态内存分配的函数
*ptr = malloc(sizeof(int) * length);
动态分配内存
players = calloc(PLAYER_COUNT, sizeof(int));
会清空动态分配的内存
players = realloc(players, PLAYER_COUNT * 2 * sizeof(int));
数组不能改变大小, 如果想改变大小,可以用realloc来重新分配内存
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <io_utils.h> 4 5 #define PLAYER_COUNT 10 6 7 void InitPointer(int *ptr, int length, int default_value) { 8 ptr = malloc(sizeof(int) * length); 9 for (int i = 0; i < length; ++i) { 10 ptr[i] = default_value; 11 } 12 } 13 14 int main() { 15 16 { 17 int * players; 18 InitPointer(players, PLAYER_COUNT, 0); 19 for (int i = 0; i < PLAYER_COUNT; ++i) { 20 PRINT_INT(players[i]); 21 players[i] = i; 22 } 23 PRINT_INT_ARRAY(players, PLAYER_COUNT); 24 } 25 26 { 27 int * players; 28 //InitPointer(&players, PLAYER_COUNT, 0); 29 players = calloc(PLAYER_COUNT, sizeof(int)); 30 for (int i = 0; i < PLAYER_COUNT; ++i) { 31 PRINT_INT(players[i]); 32 players[i] = i; 33 } 34 PRINT_INT_ARRAY(players, PLAYER_COUNT); 35 36 players = realloc(players, PLAYER_COUNT * 2 * sizeof(int)); 37 PRINT_INT_ARRAY(players, PLAYER_COUNT * 2); 38 39 if (players) { 40 41 free(players); 42 } else { 43 44 } 45 } 46 47 48 return 0; 49 }
执行结果

下面这块代码有什么问题?
我们给InitPointer传的第一个参数是指针变量, 他其实是一个变量, players, 跟ptr 是两个变量,ptr在函数执行结束会被销毁, 这样动态分配的内存就没有指针指向了,会有问题。
我们其实就想给函数传入指针, 然后函数执行之后, 这个指针指向的变量会产生变化。

那我们应该这么实现, 传参的时候传入指针变量的地址, 然后用**ptr 指针的指针来接收, 在函数里面给指针赋值


浙公网安备 33010602011771号