Стек C поврежден для строки var - PullRequest
0 голосов
/ 10 мая 2018

Таким образом, как часть проекта класса, я должен получить входную строку от пользователя и изменить действия над ней.По какой-то причине я получаю сообщение об ошибке стека в следующем коде.

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), я начал получать сообщение об ошибке, когда пользователь вводит «выход» - «Проверка времени выполнения Стек ошибки 2 вокруг переменной« substr »был поврежден», но на всю жизнь я могу »не могу найти, что не так.

Спасибо в адвенсе.

1 Ответ

0 голосов
/ 10 мая 2018

Я не смог проверить ваш код, но, вероятно, вы не выделяете достаточно места для массивов символов. Попытка записи в массив char, который не был ранее выделен, может испортить файлы cookie стека, что приводит к ошибке. Если бы вы предоставили полный код, я бы попробовал запустить его. В этом случае я могу только догадываться:)

Изменить: Возможно, вы не используете strlen право. Вместо этого вы должны использовать "sizeof (char) * charcount" вместо вызовов memset.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...