C ++中的int指针问题

时间:2014-06-19 14:30:06

标签: c++

int *sub(int *A,int q)
{
    int i = id(A,q)+1,j = id(A,q)-1;
    int *l , *m ;
    m = (int*)malloc(sizeof(int));
    *m = q;
    l = m ;
    for(i ; *(A+i) != '\0' && *(A + i) >= q ; ++i)
    {
      ++l = (int*)malloc(sizeof(int));
      *l = *(A+i);
    }
    ++l = (int*)malloc(sizeof(int));
    *l = '\0';
    for(j ; j>=0 && *(A + j) >= q  ; j--)
    {
        --m = (int*)malloc(sizeof(int));
        *m = *(A+i);
    }
    for(i = 0 ; *(m + i) != '\0' ; i++)
        cout<<*(m+i)<<"##\t";

    return m;
}

这是一个函数,它应该采用指向1D数组(A)的指针,然后返回指向另一个1D数组(m)的指针,该数组是A的子数组,并且元素大于或等于q(作为参数传递)功能sub
我想我操作int指针的方式存在一些问题。

2 个答案:

答案 0 :(得分:2)

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>


int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<int> arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int q = 5;
    std::vector<int> result;
    std::copy_if(arr.begin(), arr.end(), std::back_inserter(result), [q](int i){return i >= q; });
    std::for_each(result.begin(), result.end(), [](int i){std::cout << i << std::endl; });
    getline(std::cin, std::string());
    return 0;
}

答案 1 :(得分:2)

你无法保证m + i永远不会是'\ 0',至少不能用于已经过malloc的空间。

在评论中提到的点之上,比如确保所有空间都被适当地释放。这看起来就像整个地方的大内存泄漏。