gpt4 book ai didi

C - free() 出错?

转载 作者:行者123 更新时间:2023-11-30 19:34:22 27 4
gpt4 key购买 nike

我正在制作一些哈希函数。

它的源代码是...

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

int m_hash(char *input, size_t in_length, char *output, size_t out_length);

int main()
{
char buffer[1025];
char output[65];
output[64] = '\0';
while(1)
{
printf("enter what will hash : ");
fgets(buffer, 1024, stdin);
buffer[1024] = '\0';
m_hash(buffer, strlen(buffer), output, 64);
printf("your string (hashed) : %s\n", output);
}
return 0;
}

int m_hash(char *input, size_t in_length, char *output, size_t out_length) // 0 on Success, 1 on Fail.
{
const char OUT[64] = "zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890_-";
char *snow = (char *)malloc(sizeof(char) * out_length);
if (snow == NULL) return 1;
int *out = (int *)malloc(sizeof(int) * out_length);
if (out == NULL)
{
free(snow);
return 1;
}
memset(out, 0x00, sizeof(int) * out_length);
size_t tmp = 0, i, j;
for (i = 0; i < out_length; i++)
{
tmp += i * i;
snow[i] = tmp / (i + 1);
tmp -= snow[i];
}
for (i = 0; i < in_length; i++)
{
out[((tmp *= (i + 1)) % out_length + out_length) % out_length] += input[i];
snow[i] += input[i];
for (j = 0; j < out_length; j++)
{
out[((i + j) % out_length + out_length) % out_length] += snow[j] % (i + 1);
}
}
printf("Will free snow.\n");
free(snow); // ERROR WTF?
printf("Freed snow.\n");
for (i = 0; i < out_length; i++)
{
output[i] = OUT[(out[i] % 64 + 64) % 64];
}
free(out);
return 0;
}

当我输入短字符串时,没有错误。但是当我输入这样的长字符串时...... 奥 git _a“free(snow);”有错误?!?!!

Visual Studio 的调试消息是... 检测到堆损坏:在 0x01505D08 处的普通 block (#92) 之后。 CRT 检测到应用程序在堆缓冲区结束后写入内存。

我真的不知道这是怎么回事......

怎么了……? ㅠ.ㅜ

最佳答案

如果没有调试它发生的确切位置 -> 在某些时候,您会在分配的内存之前/之后进行写入。这会覆盖分配元数据,这不会影响程序运行时的情况,但当您尝试释放内存时,您会发现垃圾并崩溃。

如果您运行的是 Linux,我建议尝试使用 valgrind 来调试它,但显然也有一些 Windows 选项:Is there a good Valgrind substitute for Windows?

基本上,您想要的东西会在您写入越界时出错,而不是在您尝试读回时出错。

关于C - free() 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44018515/

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