c语言结构体中,一个非常奇怪的现象。求解答

运行环境 codeblock
运行过程中,输入0-10或者为负数的时候,子函数与主函数输出没有问题,然后输入11及其以上的数字,子函数正确,主函数输出为-1.
最开始我以为是内存空间溢出的问题,把MAX改小后依然存在问题。
然后我把结构体定义int n提到前面,输出就没有问题了。
下面是代码:

#include <stdio.h>
#define MAX 10
typedef struct HashNode *HashTable;
struct HashNode
{
    char data[MAX][MAX];
    int t[MAX];
    int n;
};
HashTable CreatTable(int Size);  //创建一个散列表, data为-1代表没有元素

int main(void)
{
    HashTable h;
    int x;
    scanf("%d",&x);
    h = CreatTable(x);
    printf("out n is %d\n",h->n);
}
HashTable CreatTable(int Size)  //创建一个散列表, data为-1代表没有元素
{
    HashTable h;
    int i;
    h = (HashTable)malloc(sizeof(struct HashNode));
    if(h == NULL)
    {
        printf("malloc error\n");
        exit(-1);
    }
    h->n = Size;
    printf("in n is %d\n",h->n);
    for(i = 0; i < Size; i++)
        h->t[i] = -1;
    return h;
}


错误运行案列:
图片说明

int n提前后

#include <stdio.h>
#define MAX 10
typedef struct HashNode *HashTable;
struct HashNode
{
    int n;
    char data[MAX][MAX];
    int t[MAX];
};
HashTable CreatTable(int Size);  //创建一个散列表, data为-1代表没有元素


运行如下
图片说明

求解答,感激不尽。

1个回答

我看了一下程序,在vs2017上测试了一下
先分析问题出现的位置,子函数for循环的位置
int t[10]数组大小是10 所以输入小于十的数字没有问题
当输入十一时,for循环输入十一个数字,造成数组越界,将-1写道int n中
改变位置后,越界部分没有写入 int n中,所以显示是正确的

for(i = 0; i < Size; i++)
h->t[i] = -1;
size是11, t[10]越界,
malloc 要和free成对使用
(希望对你有所帮助)

weixin_42772394
浅草夏洛洛 原来是访问越界了,谢谢了
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!