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 }
View Code

执行结果

 

 

下面这块代码有什么问题?

我们给InitPointer传的第一个参数是指针变量, 他其实是一个变量, players, 跟ptr 是两个变量,ptr在函数执行结束会被销毁, 这样动态分配的内存就没有指针指向了,会有问题。

我们其实就想给函数传入指针, 然后函数执行之后, 这个指针指向的变量会产生变化。

 

 

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

 

posted @ 2023-02-04 15:43  泥古拉斯赵四  阅读(48)  评论(0)    收藏  举报