相关疑难解决方法(0)

为什么我必须在指针上使用free而不是正常的声明?

为什么我在声明指针时必须使用free():

int *temp = (int*)malloc(sizeof(int))
*temp = 3;
Run Code Online (Sandbox Code Playgroud)

但不是我这样做的时候:

int temp = 3;
Run Code Online (Sandbox Code Playgroud)

c free pointers

12
推荐指数
4
解决办法
4713
查看次数

为什么我们不能在内存限制内声明任何大小的int数据类型的数组?

int A[10000000]; //This gives a segmentation fault
int *A = (int*)malloc(10000000*sizeof(int));//goes without any set fault.
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,出于好奇,如果最终我们能够为我们的数据结构分配更高的空间,例如,在C中使用指针方法创建的BST和链接列表没有这样的内存限制(除非总数大小超过我们机器的RAM大小),例如,在声明指针类型的上面的第二个语句中,为什么我们不能声明一个更大的数组(直到达到内存限制!!). ..这是因为分配的空间在静态大小的数组中是连续的吗?但是从那里我们得到保证,在RAM的下一个1000000字中没有其他代码将运行...?

PS:我在一些陈述中可能错了.在这种情况下请正确.

c c++ arrays memory-management

12
推荐指数
2
解决办法
1350
查看次数

轻巧,便携的C++光纤,MIT许可证

我想获得一个轻便的便携式光纤库,它具有MIT许可证(或更宽松).Boost.Coroutine不符合(不轻量级),也没有Portable Coroutine Library和Kent C++ CSP(都是GPL).

编辑:你能帮我找一个吗?:)

c++ portability licensing fiber

11
推荐指数
3
解决办法
1万
查看次数

malloc如何运作?

可能重复:
free和malloc如何在C中工作?

考虑一种情况,我必须通过malloc分配大约20个字节的内存.对于malloc()的函数调用是否成功,20个字节是否应该在内存中连续可用或者是否可以分散?例如,在上面的例子中,如果有4个或5个块,每个10个字节,malloc会工作吗?或者这是特定于操作系统还是特定于编译器?

c malloc

11
推荐指数
4
解决办法
2万
查看次数

什么是安全的?从函数返回结构或指针

#include <iostream>

struct person_t{
        int age;
};

person_t get_person1(){
        person_t person;
        person.age = 10;
        return person;
}

person_t * get_person2(){
        person_t *person = new person_t;
        person->age = 20;
        return person;
}

int main(){
        person_t person1 = get_person1();
        person_t *person2 = get_person2();
        std::cout << person1.age << std::endl;
        std::cout << person2->age << std::endl;
        delete person2;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道从函数返回结构的最安全的方法是什么.

正如在这里这里的问题的答案中所说,当你创建一个对象时get_person1(),该对象将在它超出范围之后被销毁.

但是当我搜索"如何从函数c ++返回一个结构"时,它建议我使用方法一(带有get_person1())(这里的例子).但我认为该方法会在调用函数后销毁对象,我认为方法2是最安全的.

我错了吗?或者关于这个话题的任何意见..?

谢谢!!

c++ struct return function

11
推荐指数
1
解决办法
1085
查看次数

自动内存分配如何在C++中实际工作?

在C++中,假设没有优化,那么以下两个程序最终会使用相同的内存分配机器代码吗?

int main()
{     
    int i;
    int *p;
}

int main()
{
    int *p = new int;
    delete p;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management

10
推荐指数
3
解决办法
5981
查看次数

如何从函数返回一个字符串数组

char * myFunction () {

    char sub_str[10][20]; 
    return sub_str;

} 

void main () {

    char *str;
    str = myFunction();

}
Run Code Online (Sandbox Code Playgroud)

错误:从不兼容的指针类型返回

谢谢

c

10
推荐指数
2
解决办法
3万
查看次数

对象按值传递时调用的析构函数

即使通过普通的按值调用参数传递机制将对象传递给函数,理论上它们可以保护和隔离调用参数,但是仍然可能发生可能影响甚至损坏的副作用,用作参数的对象.例如,如果用作参数的对象分配内存并在销毁时释放该内存,那么在调用析构函数时,函数内部的本地副本将释放相同的内存.这将使原始物体损坏并且实际上无用.

这是用C++编写的:完整参考

在这个程序在这里

#include<iostream>

using namespace std;

class Sample
{         
 public:
         int *ptr;
         Sample(int i)
         {
         ptr = new int(i);
         }
         ~Sample()
         {
         cout<<"destroyed";
         delete ptr;
         }
         void PrintVal()
         {
         cout << "The value is " << *ptr;
         }
 };
 void SomeFunc(Sample x)
{
 cout << "Say i am in someFunc " << endl;
}
 int main()
{
 Sample s1= 10;
SomeFunc(s1);
 s1.PrintVal();
}
Run Code Online (Sandbox Code Playgroud)

它会在对象s1从对象返回时被销毁时生成运行时错误.我无法弄清楚为什么会发生这种情况,因为应该制作副本.我想也许是因为班级定义中没有复制构造函数.但我很惊讶地发现,如果使用这个函数声明

 void SomeFunc(Sample &x)
{
 cout << "Say i am in someFunc " << endl;
} …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
4314
查看次数

如何以编程方式获取Linux上的堆地址

我可以获取堆结尾的地址sbrk(0),但有没有办法以编程方式获取堆的起始地址,而不是通过解析内容/proc/self/maps

c linux heap

9
推荐指数
1
解决办法
7679
查看次数

对于具有更多字段的类型,通过数组进行字段访问更慢

以下简短但完整的示例程序

const long iterations = 1000000000;

T[] array = new T[1 << 20];
for (int i = 0; i < array.Length; i++)
{
    array[i] = new T();
}

Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
{
    array[i % array.Length].Value0 = i;
}

Console.WriteLine("{0,-15}  {1}   {2:n0} iterations/s",
    typeof(T).Name, sw.Elapsed, iterations * 1000d / sw.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)

T替换如下类型的

class SimpleClass                   struct SimpleStruct
{                                   {
    public int Value0;                  public int Value0;
}                                   }

class ComplexClass                  struct ComplexStruct …
Run Code Online (Sandbox Code Playgroud)

c# arrays performance .net-4.5

9
推荐指数
1
解决办法
320
查看次数