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指针的方式存在一些问题。
答案 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的空间。
在评论中提到的点之上,比如确保所有空间都被适当地释放。这看起来就像整个地方的大内存泄漏。