gpt4 book ai didi

c++ - 为什么不分配内存就能正常工作

转载 作者:行者123 更新时间:2023-11-30 16:28:16 25 4
gpt4 key购买 nike

该程序检查给定的字符串是否按字母顺序排列,并且每次用户输入字符时我都会分配新的内存,但如果我不分配该内存,它就可以正常工作意味着(如果我从下面的代码中删除注释行)这是一个错误还是某种内存技术,如果我不使用该 realloc()

,它会从哪里获取内存
#include<iostream>
#include<conio.h>
#include<stdlib.h>
bool Alphabetical(char DA[],unsigned short n)
{
for(n ;n>-1;n--)
if(n==0) return true;
else if((DA[n]<91&&DA[n-1]<91)&&(DA[n]<DA[n-1])) return false;
else if((DA[n]>96&&DA[n-1]>96)&&(DA[n]<DA[n-1])) return false;
else if((DA[n]<91&&DA[n-1]>96)&&(DA[n]+=32)&&(DA[n]<DA[n-1])) return false;
else if((DA[n]>96&&DA[n-1]<91)&&(DA[n]-=32)&&(DA[n]<DA[n-1])) return false;
return true;
}
int main()
{
int block=1,i=-1;
char *DA=(char*)malloc(1*block),c;
std::cout<<"Enter a string(ONLY ALPHEBATS,ANY LENGTH)\n";
while((c=getche())!=13)
if(c>64&&c<91||c>96&&c<123)
{
DA[++i]=c;
realloc(DA,1*(++block));/// i din't understand why is it working fine without this line
}
else std::cout<<"\b \b";
std::cout<<"\nreturned "<<Alphabetical(DA,i);
}

最佳答案

您在程序开头使用 malloc 分配 1 个字节。由于各种原因(例如,优化 future 的重新分配),malloc 实际上可以分配比您请求的更多的内存。此外,操作系统通常基于页面来保护内存,因此只要访问同一页面,就不会引发错误。访问未显式分配的内存具有未定义的行为,必须避免,即使您的程序似乎可以工作。

至于你的程序,我猜错误是你将c声明为char*。指针通常有 4 或 8 个字节长,而您只分配 1 个字节。如果您将 c 声明为 char(大小为 1 字节),您的程序应该可以运行。

无论如何,当您使用 mallocrealloc 分配内存时,使用 sizeof 会更安全,因为变量的大小可能会有所不同。不同的系统。举个例子,在 32 位系统上指针通常是 4B,而在 64 位系统上通常是 8B。

关于c++ - 为什么不分配内存就能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423505/

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