前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态内存开辟中常见的错误

动态内存开辟中常见的错误

作者头像
用户11036582
发布2024-03-21 18:41:22
810
发布2024-03-21 18:41:22
举报
文章被收录于专栏:跟我一起学编程

给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行!!! 铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!! 今天我们更新了xxxxxxx内容

前言:

在我们使用malloc或者calloc这些函数进行动态内存开辟的时候,总会存在一些我们可能考虑不到的错误,今天我们就一起来看一下这些错误,让我们在以后的写代码时避免这些错误。

常见错误一:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

void test()
{
	int i = 0;
	int* p = (int*)malloc(10 * sizeof(int));
	if (NULL == p)
	{
		exit(EXIT_FAILURE);
	}
	for (int i = 0; i <= 10; i++)
	{
		*(p + i) = i;
	}
	free(p);
}

int main()
{
	test();
	return 0;
}

大家看这串代码,起初一看感觉没有任何问题,但是仔细一看就会发现,我们一共开辟的10个空间,但是循环时为十一个空间赋值,此时就会造成数组越界访问。

运行时便会出现这种错误。

常见错误二:

代码语言:javascript
复制
int main()
{
	int a = 10;
	int* p = &a;
	free(p);
	p = NULL;
	return 0;
}

大家再来看这串代码,我们可以看到最后我们使用了free进行内存释放,但是我们想一下,我们都没有使用动态内存函数开辟空间,又为啥要去释放呢,所以这就是这题的错误之处。

运行时便会产生这种错误。

常见错误三:

代码语言:javascript
复制
int main()
{
	int* p = (int*)malloc(100);
	if (p == NULL)
	{
		return 1;
	}
	for (int i = 0; i < 5; i++)
	{
		*p = i + 1;
		p++;
	}
	free(p);
	p = NULL;
	return 0;
}

大家再来看一下这串代码,我们可以发现,p在运行时地址不断增加,

因此释放p的时候地址已经不是初始地址,所以也会发生错误。

运行时就会发生以下情况。

常见错误四:

代码语言:javascript
复制
void test()
{
	int* p = (int*)malloc(100);

	free(p);
	free(p);//重复释放
}

int main()
{
	test();
	return 0;
}

下面再来看这串代码,我们会发现,这串代码中我们使用了两次free进行内存释放。

这样也会放生错误,运行一下看一下:

依然会发生这种错误。

常见错误五:

代码语言:javascript
复制
void test()
{
	int* p = (int*)malloc(100);
	if (NULL != p)
	{
		*p = 20;
	}

}

int main()
{
	test();
	while (1);
	return 0;
}

再看这串代码,我们会发现我们没有进行内存释放,然后while进行死循环,所以这个代码就会造成内存泄漏。因为有的服务器会二十四小时不停的进行的,就像一些游戏服务器,二十四小时不停的进行,如果不进行内存回收,那么最后就会造成内存泄漏问题。

总结:

本篇文章我们总结了一些我们使用动态内存分配的时候常见的一些错误,我们在使用时一定要规避这些错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 常见错误一:
  • 常见错误二:
  • 常见错误三:
  • 常见错误四:
  • 常见错误五:
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档