C堆栈因字符串变量

时间:2018-05-10 08:37:29

标签: c stack

因此,作为类项目的一部分,我应该从用户接收输入字符串并对其进行各种操作。出于某种原因,我在以下代码中遇到了堆栈损坏的错误。

void main()
{
char cmd[80] = "", substr[81] = "", matrixName1[11], matrixName2[11], substrFrob[11] = "";
int start = 0, end = 0, cmdSort, i, j, prog = 0, row = 0, col, row1, row2, col1, col2, **matrix1, **matrix2, trace = 0, words, matrixNum = 0;
memset(matrixName1, 0, strlen(matrixName1));                //reseting variables
memset(matrixName2, 0, strlen(matrixName2));
printf_s("@");
fgets(cmd, sizeof(cmd), stdin);
words = wordCounter(cmd);
start = end;
stringCutter(substr, cmd, &start, &end);
while (1)
{
    if (prog == 0)                                                  //sorting for command and number of args
    {
        if (!strcmp(substr, "exit") && words == 1) break;
        else if (!strcmp(substr, "zeroes") && words == 4) cmdSort = 1;
        else if (!strcmp(substr, "set") && words > 1) cmdSort = 2;
        else if (!strcmp(substr, "echo") && words == 2) cmdSort = 3;
        else if (!strcmp(substr, "frob") && words == 3) cmdSort = 4;

/* rest of the code*/

if (matrixName1[0] != 0)            //freeing memory
{
    for (i = 0; i < row1; i++)
        free(matrix1[i]);
    free(matrix1);
}
if (matrixName2[0] != 0)
{
    for (i = 0; i < row2; i++)
        free(matrix2[i]);
    free(matrix2);
}
//system("cls");
//exit(0);

现在作为项目的一部分,我们不能在stdlib.h中使用任何函数,期望malloc和free。一旦我删除了退出(0),当用户输入“退出”时我开始收到错误 - “运行时检查变量'substr'周围的失败#2堆栈已损坏” 但是对于我的生活,我找不到什么错误。

感谢普罗旺斯。

1 个答案:

答案 0 :(得分:0)

我无法检查您的代码,但您可能没有为char数组分配足够的空间。尝试写入以前未分配的char数组可能会损坏堆栈cookie,从而导致错误。 如果您提供了完整的代码,我会尝试运行它。在这种情况下,我只能猜测:)

编辑:你可能没有正确使用strlen。你应该使用&#34; sizeof(char)* charcount&#34;而是在memset调用上。