gpt4 book ai didi

c - 堆大小错误字符串

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

我的程序因以下几行而崩溃:

警告:HEAP[maze.exe]:警告:00392F30 处的堆 block 已在 00392F3B 处修改,超过请求的大小 3

我正在为一个字符串动态分配空间

int userReq() {
char **maze=NULL;
char *pchar;
int i, test_cases, cur_test=0;
int row, col;

/* gather the amount of test cases */
scanf("%d", &test_cases);
do{
scanf("%d",&row);
scanf("%d",&col);
/* allocate memory for char pointer row-wise */
maze = (char **) malloc(row*sizeof(char*));

for(i=0;i<row;i++)
/* for each cell allocate the num of chars in cell */
maze[i] = (char *) malloc(col*sizeof(char));

for(i=0;i<row;i++)
scanf("%s",maze[i]);
/* this function does modify the maze by changing some of the spots to a different char */
CallSomeFunctionHere(maze);


/* free first the cells then the entire block */
for(i=0;i<row;i++)
free(maze[i]);
free(maze);

cur_test = cur_test + 1;

}while(cur_test < test_cases);

/* if we were successful then exit program with
success */
return 0;

我的程序在执行逻辑然后尝试释放内存后崩溃。

最佳答案

这意味着您请求的内存比您需要的少。最有可能的罪魁祸首是这一行:

maze[i] = (char *) malloc(col*sizeof(char));

由于您将 maze[i] 作为 %s 目标传递给 scanf,因此您需要分配一个额外的 char 为空终止符。

将输入限制为您分配的内容是一个很好的主意。考虑使用 fgets 而不是 scanf:

for(i=0;i<row;i++) 
fgets(maze[i], col+1, stdin);

附言在 C 中,您不需要强制转换 malloc。您也不需要乘以 sizeof(char),因为标准要求它为 1

maze[i] = malloc(col+1);

关于c - 堆大小错误字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19587588/

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