2021,你还会继续坚持flash吗...

随着2021年的到来,微软停止支持FlashPlayer,大部分浏览器也不再内置,这意味着依赖Flash的内容如4399小游戏等将无法正常运行。尽管仍有途径下载FlashPlayer,但HTML5已成为主流替代方案,其在效率和安全性上更胜一筹。面对Flash的退役,人们开始转向HTML5的怀抱。这是一个时代的结束,也是新技术的开始。

寒假的第二天,闲着没事想玩一玩小游戏,结果↓
在这里插入图片描述
嗯,flashplayer被微软删了,点开之后就是这样👇(注意,版本与文件大小都已经是零了)在这里插入图片描述
就是说,2021年及其之后的浏览器(大多数)都不再内置flash播放器,这就意味着以后像43999小游戏之类的平台将犹如得了半身不遂一样,运行不起来了👇
在这里插入图片描述
But,我搜到了如下消息:
在这里插入图片描述
微软放弃flash,并不代表中国将没有flash,(毕竟这么多年,flash早已在世界各地播下了种子,想用自己种即可)重橙就种下了这颗种子.
大家如果有需要可以去Flash.cn下载最新版的Flash Player.
不过有人认为:
在这里插入图片描述
当然这只是一家之言,仅供大家参考.

在这里插入图片描述

flash曾经的辉煌不必再进行叙述,2021年了,这句话的关键词不再是"辉煌",而是"曾经".换句话,4399小游戏曾经多么的辉煌啊!这句感叹句的关键词不再是"辉煌",而是"曾经".或许大家更好理解.
运行个小游戏就可能占到1个G,又存在不容小觑的安全问题.电脑软件科技发展至今,效率低又不安全而且有优秀替代品的软件注定退休.
在这里插入图片描述

强者致胜,2021年之前不久,HTML5总体质量就已吊打FlashPlayer.如今,已经是2021年了,依旧选择flash的同志们希望理性思考,毕竟情怀虽然能用嘴说,但不能当成饭用嘴吃.😂开个玩笑…
本人选择尊重Flash老前辈的退休,拥入html5的怀抱,那么,2021,你还会继续坚持flash吗?

你遇到了如下错误: ``` Memory allocation failed. ``` 这是由于你在代码中使用了 `malloc` 动态分配内存,但系统返回了 `NULL`,说明**内存分配失败**。 --- ## ❌ 问题原因分析 ### 1. **`malloc` 返回 NULL 的常见原因:** - **内存不足**:系统可用内存不足。 - **未包含头文件 `<stdlib.h>`**:导致编译器无法识别 `malloc` 函数原型。 - **未检查返回值**:直接使用未分配成功的指针,导致后续崩溃。 - **使用了非常量的 `flash_len` 作为分配大小**(虽然你没有直接使用,但 `flash_len` 可能为 0 或负数)。 --- ## ✅ 解决案 ### ✅ 法 1:使用**固定大小栈内存**代替 `malloc` 如果你不需要处理非常大的 JSON 数据,可以使用栈上分配的固定大小缓冲区,避免 `malloc` 失败: ```c #define JSON_BUF_SIZE 1024 char raw_json[JSON_BUF_SIZE]; char json_str[JSON_BUF_SIZE]; ``` ### ✅ 法 2:确保 `flash_dtu->len` 和 `flash_len` 合理 确保你使用的 `flash_len` 是合理的值,不能为 0 或负数: ```c if (flash_len <= 0 || flash_len > JSON_BUF_SIZE - 1) { printf("Invalid flash length.\n"); return; } ``` ### ✅ 法 3:使用 `malloc` 时检查返回值 如果你坚持使用动态内存分配,务必检查返回值: ```c char *raw_json = malloc(JSON_BUF_SIZE); char *json_str = malloc(JSON_BUF_SIZE); if (!raw_json || !json_str) { printf("Memory allocation failed.\n"); free(raw_json); free(json_str); return; } ``` ### ✅ 法 4:避免使用 `flash_len` 作为缓冲区大小(避免 VLA) 你原来的代码中: ```c char raw_json[flash_len]; ``` 这是 C99 的 **变长数组(VLA)**,在嵌入式系统或某些编译器中不被支持。建议使用固定大小缓冲区。 --- ## ✅ 完整修复后的代码示例(使用栈内存) ```c #include <stdio.h> #include <string.h> #include <stdlib.h> // 必须包含,否则 malloc 无法识别 #include "cJSON.h" #define JSON_BUF_SIZE 1024 void parse_json_data(struct flash *flash_dtu) { char raw_json[JSON_BUF_SIZE]; char json_str[JSON_BUF_SIZE]; // 步骤1:复制原始数据(不提前终止) int raw_len = 0; for (; raw_len < flash_dtu->len && raw_len < JSON_BUF_SIZE - 1; raw_len++) { raw_json[raw_len] = flash_dtu->rbuff[raw_len]; } raw_json[raw_len] = '\0'; printf("原始数据长度(过滤00后): %d\n", raw_len); // 步骤2:紧凑化处理(去除空白字符) int compact_len = 0; for (int i = 0; i < raw_len; i++) { char c = raw_json[i]; if (c == ' ' || c == '\r' || c == '\n') { continue; } json_str[compact_len++] = c; } json_str[compact_len] = '\0'; printf("紧凑JSON长度(预期约626): %d\n", compact_len); printf("紧凑JSON内容: %s\n", json_str); // 打印十六进制调试信息 printf("Raw data: "); for (int i = 0; i < compact_len; i++) { printf("%02X ", (unsigned char)json_str[i]); } printf("\n"); // 步骤3:解析紧凑 JSON cJSON_Hooks hooks = {malloc, free}; cJSON_InitHooks(&hooks); cJSON *root = cJSON_Parse(json_str); if (root == NULL) { const char *error_ptr = cJSON_GetErrorPtr(); if (error_ptr != NULL) { int error_pos = error_ptr - json_str; printf("解析失败位置偏移: %d\n", error_pos); printf("错误附近字符: "); for (int i = error_pos - 10; i < error_pos + 10; i++) { if (i >= 0 && i < compact_len) { printf("%c", json_str[i]); } } printf("\n"); } printf("Error: Failed to parse JSON.\n"); flash_dtu->rdflag = 1; return; } // 成功解析,可以继续处理 root 对象... cJSON_Delete(root); } ``` --- ## ✅ 总结一句话: > **`Memory allocation failed` 是由于 `malloc` 分配失败或未检查返回值,建议使用固定大小栈内存缓冲区,避免 VLA 和动态分配失败风险。** --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值