|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
- TCHAR* p, * q;
- //用法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)
- p = (TCHAR*)malloc(10 * sizeof(TCHAR));
-
- for (int i = 0; i < 9 * sizeof(TCHAR);i=i+ sizeof(TCHAR)) {
- *(p + i) = _T('a');
- }
- *(p + 9) = _T('\0');
- q = (TCHAR*)realloc(p, 15*sizeof(TCHAR));//修改数组容量
- /*
- 格式:指针名=(数据类型*)realloc(源指针名,新的大小)
- 将原数组中的数据拷贝到新的数组中,释放掉原数组,并返回一个数组首地址
- 若失败:不会释放掉原数组,会返回一个空地址,表示开辟新数组失败,原来的数组空间没动
- */
- if (q != NULL) {
- for (int i = 9*sizeof(TCHAR); i < 13 * sizeof(TCHAR); i=i+ sizeof(TCHAR)) {
- *(q + i) =_T( 'b');
- }
- }
- *(p + 14 * sizeof(TCHAR)) = _T('\0');
- CString str = q;
- ::OutputDebugString(str);
复制代码
出现两个问题:1 为何有乱码?
2.q 没有扩容 ?
1.可能是因为在使用 _T('a') 和 _T('b') 时,它们被转换成了不同的编码格式,导致输出时出现乱码。建议使用 Unicode 编码的字符,如 L'a' 和 L'b'。
2.实际上,q 已经被成功扩容了。在 realloc 函数执行成功后,q 指向了新的内存地址,而原来的内存空间已经被释放。因此,应该使用 q 指针来访问新的内存空间,而不是 p 指针。另外,最后一行代码中的 *(p + 14 * sizeof(TCHAR)) 应该改为 *(q + 14),以避免访问已经被释放的内存空间。
修改代码:
- TCHAR* p, * q;
- // 分配初始内存空间
- p = (TCHAR*)malloc(10 * sizeof(TCHAR));
- // 初始化 p 中的数据
- for (int i = 0; i < 9; i++) {
- *(p + i) = _T('a');
- }
- *(p + 9) = _T('\0');
- // 扩容 p
- q = (TCHAR*)realloc(p, 15 * sizeof(TCHAR));
- if (q != NULL) {
- // 在 q 中添加新的数据
- for (int i = 9; i < 13; i++) {
- *(q + i) = _T('b');
- }
- *(q + 14) = _T('\0');
- }
- // 使用 q 输出结果
- CString str = q;
- ::OutputDebugString(str);
- // 释放内存空间
- free(q);
复制代码
楼主给个最佳答案吧
|
-
|