首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++删除c-string/其他类型数组的数组

C++删除c-string/其他类型数组的数组
EN

Stack Overflow用户
提问于 2010-11-29 09:41:15
回答 2查看 8.8K关注 0票数 4

编辑

好吧,那就说得通了,谢谢尖牙和CashCow。不能删除作为const分配的数据,这样字符串文本就不存在了。因此,如果我将初始化更改为如下所示:

代码语言:javascript
复制
char **groups = new char*[2];

char *s1 = new char[10];
char *s2 = new char[10];
char c1 = 'a';
char c2 = 'b';
for(int i = 0; i < 9; i++)
{
    s1[i] = c1;
    s2[i] = c2;
}
s1[9] = NULL;
s2[9] = NULL;

groups[0] = s1;
groups[1] = s2;

硬编码我的for循环,这样它只会遍历i=1和i=2,然后一切都正常。

我注意到,只有在用int arraySize = sizeof arr / sizeof *arr;而不是在本地分配数组时,new[]才能正常工作。这是因为我的原始char ** groups;变量衰变到指针,对吗?

现在,我想知道,是否有数据是否是康斯特?

原创

我知道数组和指针是邪恶的,还有一些伟大的东西叫做向量和链表。

但是,当谈到记忆管理的时候,我是个新手,我觉得有点自虐。假设我做了一个C-字符串数组。我从这个问题和FAQ中了解到,您必须将type a = new type[len];delete[] a;匹配。至少我是这么想的。

FAQ谈到管理锯齿状数组这里,但他关注的是矩阵,我不确定它是否适用于我正在做的事情。

这段代码对我来说很有意义,但是在delete[] a;上失败了一个断言(在Visual 2008上调试)。这有什么问题,我该如何完成这一任务?

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    // Initialize array of C-strings
    char *groups[] = {"testing1", "testing2"};

    // Sanity check
    cout << groups[0] << endl;
    cout << groups[1] << endl;

    // Compute size
    int arrsize = sizeof groups / sizeof groups[0];
    cout << arrsize << endl;

    for (int i = 0; i < arrsize; i++)
    {
        // Since each string is a char array, free string memory with delete[]
        cout << "Deleting element #" << i << endl;
        delete[] groups[i];
    }
    cout << "Freeing pointer array." << endl;

    // Free the memory storing the pointers
    delete[] groups;

    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-29 09:43:02

您尝试释放字符串文本--这是未定义的行为:

代码语言:javascript
复制
char *groups[] = {"testing1", "testing2"};
delete[] groups[i];

只对由delete[]返回的指针调用new[]

票数 9
EN

Stack Overflow用户

发布于 2010-11-29 09:54:57

文字字符串是像"testing1“这样的表达式。它们是const char *型。它们不能修改,也不能删除。实际文本通常位于程序的静态只读内存区域。

您可以构造一个char数组,其可写性如下:

char group[] = "testing1";

这是可修改的,但您不能删除它,也不能扩展它以使其更大。它还具有本地作用域,因此不能从函数返回它。

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

https://stackoverflow.com/questions/4302467

复制
相关文章

相似问题

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