c-马洛克空间在另一个明显独立的功能之后无法访问



我在下面的change((函数中遇到了malloc问题。当i=5时,当我读取并试图将输入行保存在s中时,表[4]发生变化,调试器说:"<错误:无法访问地址0xa69673>处的内存&";,即使在该值正确之前。使用scanf而不是fgets或打印表[3]的值也会出现同样的问题。

(我在Windows10的Linux子系统中使用gcc -std=gnu11 -g在Ubuntu上的VS代码中进行编译和gdb调试(

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char **table;
int change()
{
char s[1025];
for(int i = 0; i <= 6; i++)
{
fgets(s, 1024, stdin);
//scanf(" %1024[^n]%*c", s);
table[i] = (char *) malloc(strlen(s) + 1);
strcpy(table[i], s);
}
}
int main()
{
table = malloc(10);
change();
return 0;
}

读取第六(i=5(行之前的值

读取第六(i=5(行后的值

错误在这里:

table = malloc(10);

这分配了10个字节的存储空间,这不足以容纳7个指针(change中的循环循环7次(。您应该使用类似malloc(7 * sizeof(char *));的内容。

将来,当您遇到这样的错误时,请尝试在valgrind调试实用程序下运行该程序。在这种情况下,它会清楚地告诉你,你正在写超过分配给table的空间的末尾。

作为参考,sizeof(char *)几乎总是四或八。

相关内容

  • 没有找到相关文章

最新更新