gpt4 book ai didi

c - 在 C 中正常 block (#155) 后检测到堆损坏

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:35 24 4
gpt4 key购买 nike

我有一段代码是这样的:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
char array[10000];
char *newArray=NULL;
int j=0;
int k;
while(gets_s(array))
{
int length=strlen(array);
newArray=(char *)realloc(NULL,length*sizeof(char));
for(int i=length-1;i>=0;i--)
{
if(array[i]==' '||i==0)
{
if(i==0)
i--;
k=i+1;
while(array[k]!=NULL&&array[k]!=' ')
{
newArray[j++]=array[k++];
}
newArray[j++]=' ';
}
}
newArray[j]='\0';
printf(newArray);
free(newArray);
}
}

我想做的是,当我连续输入字符串时,我想反转字符串。

比如我输入:“this is a dog”,结果会返回:“dog a is this”,我想继续输入另一个字符串,发现错误:

"HEAP CORRUPTION DETECTED: after Normal block (#155) at 0x004CAF38
CRT detected that the application wrote to memory after end of heap buffer"

这是什么原因造成的?

最佳答案

您没有在 newarray 中分配足够的内存来分配字符串终止字符的结尾:

newArray=(char *)realloc(NULL,length*sizeof(char));

稍后你要设置:

newArray[j]='\0';

其中 j 超出内存大小 1。

更改为:

newArray=(char *)realloc(NULL,length*sizeof(char) + 1);

  newArray[j-1]='\0'

还需要重新设置j。

关于c - 在 C 中正常 block (#155) 后检测到堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27643801/

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