delete和delete []的确切行为是什么?

用户名

为什么此代码错误?我缺少有关的行为的东西deletedelete[]

void remove_stopwords(char** strings, int* length) 
{
    char** strings_new = new char*[*length];
    int length_new = 0;

    for(int i=0; i<*length; i++) {
        if(is_common_keyword(strings[i]) == 0) {
            strings_new[length_new] = strings[i];
            length_new++;
        }
        else {
            delete strings[i];
            strings[i] = nullptr;
        }
    }
    delete[] strings;

    strings = new char*[length_new];
    for(int i=0; i<length_new; i++) {
        strings[i] = strings_new[i];
    }
    delete[] strings_new;
    *length = length_new;
}

说明:此代码应采用C样式字符串的数组,并删除其中的某些特定字符串;C样式字符串数组是使用new []创建的,每个C样式字符串都是使用new创建的。代码的结果是没有单词被取消,但仅对数组进行了切片。

6502

我看不到使用new[]delete[]显示的代码有任何问题

不,等等

我看到了很多问题,但是您的意图很明确,并且代码似乎可以完成您想要的事情。

我注意到的唯一逻辑问题是您要按strings传递(它是a char**,并且在函数中重新分配它不会影响包含指针的调用者变量)。将签名更改为

void remove_stopwords(char**& strings, int* length)

因此,应传递引用来解决该问题。

(1)使用std::vector<const char *>似乎更合乎逻辑,甚至更好(std::vector<std::string>如果可能话),它将处理所有分配和释放。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

delete和delete []的确切行为是什么?

来自分类Dev

mapper和reducer函数的确切输出是什么

来自分类Dev

read()和readline()的确切区别是什么?

来自分类Dev

“ IFS =!”的确切用法和含义是什么?

来自分类Dev

initializeUnorderedBulkOperation和initializeOrderedBulkOperation的确切区别和优点/缺点是什么?

来自分类Dev

C ++省略了`noexcept`说明符和`noexcept(false)`,它们的确切含义是什么?

来自分类Dev

Common Lisp中的NULL和NIL之间的确切区别是什么?

来自分类Dev

Windows Azure和Windows IIS之间的确切区别是什么?

来自分类Dev

content-type:text / json和application / json之间的确切区别是什么?

来自分类Dev

Docker容器中SizeRootFs和SizeRw之间的确切区别是什么?

来自分类Dev

适配器和代理模式之间的确切区别是什么?

来自分类Dev

“适配器”和“介体”模式之间的确切区别是什么?

来自分类Dev

BITCODE_ENABLE和dylib框架之间的确切联系是什么?

来自分类Dev

拦截器和transformResponse之间的确切区别是什么?

来自分类Dev

wpf中的ToolBarPanel和ToolBarTray之间的确切区别是什么?

来自分类Dev

“ ExpectedConditions.visibilityOfElementLocated”和“ ExpectedConditions.presenceOfElementLocated”之间的确切区别是什么?

来自分类Dev

线程入口和线程启动之间的确切区别是什么?

来自分类Dev

SessionLocaleResolver和FixedLocaleResolver之间的确切区别是什么

来自分类Dev

awk和grep cut之间的确切区别是什么?

来自分类Dev

/ proc和原始磁盘上的`grep`是个坏主意的确切原因是什么?

来自分类Dev

$ mycol,[[mycol]]和[,mycol,with = FALSE]的地址列之间的确切区别是什么?

来自分类Dev

Linux内核发行版和版本之间的确切区别是什么?

来自分类Dev

“子shell”和“子进程”之间的确切区别是什么?

来自分类Dev

“终端”,“外壳”,“ tty”和“控制台”之间的确切区别是什么?

来自分类Dev

.login和.cshrc文件之间的确切区别是什么?

来自分类Dev

“独立的”和“独立的”用户流程的确切含义是什么?

来自分类Dev

“独立的”和“独立的”用户流程的确切含义是什么?

来自分类Dev

在Excel中删除和添加这些特殊字符的确切公式是什么?

来自分类Dev

BITCODE_ENABLE和dylib框架之间的确切联系是什么?

Related 相关文章

  1. 1

    delete和delete []的确切行为是什么?

  2. 2

    mapper和reducer函数的确切输出是什么

  3. 3

    read()和readline()的确切区别是什么?

  4. 4

    “ IFS =!”的确切用法和含义是什么?

  5. 5

    initializeUnorderedBulkOperation和initializeOrderedBulkOperation的确切区别和优点/缺点是什么?

  6. 6

    C ++省略了`noexcept`说明符和`noexcept(false)`,它们的确切含义是什么?

  7. 7

    Common Lisp中的NULL和NIL之间的确切区别是什么?

  8. 8

    Windows Azure和Windows IIS之间的确切区别是什么?

  9. 9

    content-type:text / json和application / json之间的确切区别是什么?

  10. 10

    Docker容器中SizeRootFs和SizeRw之间的确切区别是什么?

  11. 11

    适配器和代理模式之间的确切区别是什么?

  12. 12

    “适配器”和“介体”模式之间的确切区别是什么?

  13. 13

    BITCODE_ENABLE和dylib框架之间的确切联系是什么?

  14. 14

    拦截器和transformResponse之间的确切区别是什么?

  15. 15

    wpf中的ToolBarPanel和ToolBarTray之间的确切区别是什么?

  16. 16

    “ ExpectedConditions.visibilityOfElementLocated”和“ ExpectedConditions.presenceOfElementLocated”之间的确切区别是什么?

  17. 17

    线程入口和线程启动之间的确切区别是什么?

  18. 18

    SessionLocaleResolver和FixedLocaleResolver之间的确切区别是什么

  19. 19

    awk和grep cut之间的确切区别是什么?

  20. 20

    / proc和原始磁盘上的`grep`是个坏主意的确切原因是什么?

  21. 21

    $ mycol,[[mycol]]和[,mycol,with = FALSE]的地址列之间的确切区别是什么?

  22. 22

    Linux内核发行版和版本之间的确切区别是什么?

  23. 23

    “子shell”和“子进程”之间的确切区别是什么?

  24. 24

    “终端”,“外壳”,“ tty”和“控制台”之间的确切区别是什么?

  25. 25

    .login和.cshrc文件之间的确切区别是什么?

  26. 26

    “独立的”和“独立的”用户流程的确切含义是什么?

  27. 27

    “独立的”和“独立的”用户流程的确切含义是什么?

  28. 28

    在Excel中删除和添加这些特殊字符的确切公式是什么?

  29. 29

    BITCODE_ENABLE和dylib框架之间的确切联系是什么?

热门标签

归档