吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1470|回复: 8
收起左侧

[已解决] C动态分配内存

[复制链接]
ing 发表于 2020-3-7 20:34
本帖最后由 ing 于 2020-3-7 21:21 编辑

为什么指针变量 a 需要动态分配内存,temp 却不需要?
捕获.PNG

如果我不为指针 a 分配内存,那么将会导致异常的发生
捕获.PNG
uninitialized local variable 'a' used

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

你与明日 发表于 2020-3-7 20:38
本帖最后由 你与明日 于 2020-3-7 20:41 编辑

char **a =nullptr;  //能编译通过,但不会分配内存给你,指针类型的数据都是需要给他一个内存地址

temp的内存地址是来自char **a

免费评分

参与人数 1热心值 +1 收起 理由
ing + 1 谢谢@Thanks!

查看全部评分

nstar1221 发表于 2020-3-7 20:46
malloc是在堆中申请空间,char** a是指向申请的空间的首地址,char** temp同样也是个指针,指向访问地址。
也就是说a是用于读写申请空间的,你给他换个别的名字也一样,只要有空间就可以往里面放数据
古月不傲 发表于 2020-3-7 20:58
这样能编译通过? 2级指针怎么能直接分配值
[C] 纯文本查看 复制代码
const char **a = (const char**)malloc(3 * sizeof(const char*));
		int n = 3;

		a[0] = "qwer";
		a[1] = "asdf";
		a[2] = "zxcv";

		for (int i = 1; i < n; i++)
		{
			for (int j = 1; j < n; j++)
			{
				if (a[j] < a[j - 1])
				{
					const char *temp = a[j - 1];
					a[j - 1] = a[j];
					a[j] = temp;
				}
			}
		}
hlrlqy 发表于 2020-3-7 21:17
temp只是一个指针,这个指针编译的时候就已经在堆栈中存着了,他只是一个指向其他变量的指针,你分配内存返回的也是指针,声明指针变量编译器给你管理的,不要跟手动申请的内存空间混淆
叮咚歌 发表于 2020-3-7 21:18
干嘛用二级指针, 弄的复杂. 看提示,好像是a[0]地址是不定的.因为a内存有编译器为其分配地址, 而a[0]即a内存没有存放任何a[0]信息.
 楼主| ing 发表于 2020-3-7 21:30
古月不傲 发表于 2020-3-7 20:58
这样能编译通过? 2级指针怎么能直接分配值
[mw_shl_code=c,true]const char **a = (const char**)malloc ...

感谢提醒,但确实可以编译运行,不过为什么这里 malloc(3 * sizeof(const char*));
可以存储"qwer"4个字符
a[0][0] = "q";
a[0][1] = "w";
a[0][2] = "e";
a[0][3] = "r";

他不是类似这样的吗
a[3][3]
叮咚歌 发表于 2020-3-7 21:35
你是怎么编译通过的, char** a 被(char * ) 赋值.第一个连编译都不用,就提示你不行.
古月不傲 发表于 2020-3-7 21:41
ing 发表于 2020-3-7 21:30
感谢提醒,但确实可以编译运行,不过为什么这里 malloc(3 * sizeof(const char*));
可以存储"qwer"4个 ...

const char **a = (const char**)malloc(3 * sizeof(const char*));
a的地址 假设 = 0x0142D2E8  
0x0142D2E8:48 9b 54 00 50 9b 54 00 58 9b 54 00

a[0] = 0x00549b48:qwer....
a[1] = 0x00549b50:asdf....
a[2] = 0x00549b58:zxcv....
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表