首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试断言失败。BIG_ALLOCATION_ALLIGNMENT

调试断言失败。BIG_ALLOCATION_ALLIGNMENT
EN

Stack Overflow用户
提问于 2017-01-11 13:58:04
回答 1查看 1.3K关注 0票数 2

我试图将用户输入的笔记存储在一个数组中。验证工作正常,但是当我在循环中输入最后一个值时,我得到:

代码语言:javascript
复制
Debug Assertion Failed!
Expression: "(_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT - 1))==0"&&0
An invalid parameter was passed to a function that considers invalid parameters fatal.

我很难理解问题出在哪里,以及如何解决问题。

代码语言:javascript
复制
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

typedef string noteName;

noteName getNoteName(int i)
{
    bool flag = true;
    noteName Namein;

    do
    {
        cout << "Please enter note name no. " << i + 1 << ": ";
        cin >> Namein;
        cout << "------------------------------------\n";

        if (Namein.length() > 3 || Namein.length() < 2)
        {
            cout << "Sorry, a note name must be 2 or 3 characters long. Please try again.\n";
            flag = false;
        }
        else if (Namein.length() == 3 && Namein[1] != '#')
        {
            cout << "Sorry, the second character of a sharp note name must be #. Please try again.\n";
            flag = false;
        }
        else if ((Namein[0] < 'a' || Namein[0] > 'g') && (Namein[0] < 'A' || Namein[0] > 'G'))
        {
            cout << "Sorry, the first character of a note name must be a letter between A and G. Please try again.\n";
            flag = false;
        }
        else if (isdigit(Namein.back()) == false)
        {
            cout << "Sorry, the last character of a note name must be a number. Please try again.\n";
            flag = false;
        }
        else
        {
            flag = true;
        }
    } while (flag == false);

    return Namein;
}

int main()
{
   const int numNotes = 4;

    noteName NoteNames[numNotes];

    cout << "Hello\n";

    for (int i = 0; i <= numNotes; i++)
    {
        NoteNames[i] = getNoteName(i);
    }

    cout << "Thank you, the note names and lengths you entered were: \n\n";

    for (int i = 0; i <= numNotes; i++)
    {
        cout << i << ". " << NoteNames[i] << "\n";
    }

    cout << "Done!";

    return 0;
}

我想说的是,这与getNoteName()具有string返回类型有关,因为我还没有遇到任何其他返回int的函数都没有这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 13:59:26

noteName NoteNames[numNotes];定义了一个数组,其中NoteNames[numNotes - 1]是您可以访问的最大元素。

你走得比这更远。做这件事的行为是没有定义的,它表现为你观察到的崩溃。

for (int i = 0; i < numNotes; i++)或类似的方法替换循环限制。

(还可以使用类名和变量名的CamelCase约定,这会使您的代码难以阅读。)

(我还希望看到constexpr int numNotes = 4;:谷歌的更多细节。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41592845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档