gpt4 book ai didi

c++ - 字符串堆损坏

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:16 26 4
gpt4 key购买 nike

假设我有这段代码

void someFunction(args..) {
char array[4];
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';
array[3] = 'd';
}

基本上,我的意思是数组末尾没有“\0”。当我们离开这个函数时,array[] 被释放——对吧?最后没有'\0'的事实会导致堆损坏吗?如果像这样的功能经常出现怎么办?如果我这样做是否相同:

void someFunction(args..) {
char* array = new char[4];
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';
array[3] = 'd';
//and now i dont call
//delete array;
}

在此先感谢您的帮助! :)

最佳答案

不,这两种情况都不会导致堆损坏。

终止空字符用于向库函数发出字符串结束信号。您在这里没有使用任何库函数。

在第一种情况下,数组分配在堆栈上,您给出一个确切的大小 (4)。当调用该函数时,堆栈指针将减少到足以为该变量增加空间,而当它返回时,堆栈指针将增加相同的量。数组的实际内容(包括是否存在任何空终止字符)对此过程绝对没有影响。

你的第二种情况会导致内存泄漏,但仍然不会导致堆损坏,因为——同样——你没有将指针与任何需要它的库函数一起使用。

关于c++ - 字符串堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com