【发布时间】:2019-02-24 16:04:43
【问题描述】:
这个程序检查给定的字符串是否按字母顺序排列,并且每次用户输入一个字符时我都会分配新的内存,但如果我不分配该内存意味着它工作正常(如果我从下面的代码中删除注释行) 如果我不使用 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);
}
【问题讨论】:
-
变量
c应该是char,而不是char* -
您还应该在 malloc/realloc 中使用
sizeof(char),而不是1。它在大多数情况下不会产生影响,但更具可读性并且代码更具可移植性。 -
amendo 我想我每次都需要额外的时间来计算大小,但我的问题是 -> 如果我删除 realloc 行,代码可以正常工作,这是为什么呢?
标签: c++ memory memory-management heap-memory