gpt4 book ai didi

c - 内存破坏错误

转载 作者:太空狗 更新时间:2023-10-29 14:53:36 24 4
gpt4 key购买 nike

我有一小段代码。我用 -lmcheck 编译它,因为我正在尝试调试我有相同类似错误的代码。

运行此代码时出现此错误:

memory clobbered before allocated block

有人可以解释为什么 free(ptr) 会抛出这个错误吗?

我还能如何释放指针?

谢谢。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define LEN 5


int main(int argc, char *argv[]){

char *ptr = NULL;

ptr = (char *) malloc(LEN+1);// +1 for string
strcpy(ptr, "hello");

int i = 0;
for(i = 0; i<LEN; i++)
{
printf("ptr[%d] = %c\n", i, ptr[i]);
ptr++;
}
free(ptr);


return 0;
}

最佳答案

您正在递增 ptr,因此更改了它指向的地址。你不能那样做。

在你的情况下,有一个单独的指针,比方说 char * p = ptr 并使用 p 进行操作,而 ptr 完好无损,所以你可以稍后free(ptr)

编辑 再次查看您的代码,我发现您在不应该执行的操作中执行了 ptr++。您正在访问数组中的字符,如 ptr[i],如果您弄乱了 ptr 指针,则您正在更改基地址并使用 访问字符ptr[i] 会导致(并将导致)意外结果。

如果您简单地删除该行 (ptr++),您的代码将神奇地工作。如果您想探索指针概念并尝试其他解决方案,您的代码可能如下所示:

int main(int argc, char *argv[]){

char *ptr = NULL;
char * p;

ptr = (char *) malloc(LEN+1);// +1 for string (please check for NULL)
p = ptr;

strcpy(ptr, "hello");

int i = 0;
while (*p) // note how I changed it to a while loop, C strings are NULL terminated, so this will break once we get to the end of the string. What we gain is that this will work for ANY string size.
{
printf("ptr[%d] = %c\n", i++, *p); // here i dereference the pointer, accessing its individual char
p++;
}
free(ptr);


return 0;
}

关于c - 内存破坏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571455/

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