小编Chr*_*ris的帖子

无法理解sizeof()的返回值

我的代码中有这个:

int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);
Run Code Online (Sandbox Code Playgroud)

打印出来的代码,

arraysize:8

为什么是8而不是4?(由于4*sizeof(char)= 4*1)

c malloc

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

调用realloc后是否需要初始化(设置为0)内存?

我需要实现一个指向typedef指针的简单动态指针数组.
每次用户请求时使用realloc,数组大小将增加sizeof(指针).
所以我拥有的是:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void* node;

void printmem(node* a, int c) {
    int i;
    for (i = 0; i < c; ++i)
    {
        printf("%d\t\t%p\n", i, a[i]);
    }
}

int main(void) {
    node* nodes = NULL;
    int i = 0, count = 20;

    for (i = 0; i < count; ++i)
    {
        nodes = realloc(nodes, sizeof(node));
    }
    printf("Done reallocating\n");
    printmem(nodes, i);
    // free(a);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

Done reallocating
0       (nil)
1       (nil)
2       (nil) …
Run Code Online (Sandbox Code Playgroud)

c void-pointers realloc

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

我们如何在汇编代码 (MIPS) 中取消引用指针?

我看到了这个问题,我想知道我们如何取消对 int 指针的引用?
这是代码:

int load(int *ptr) 
{
    return *ptr;
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道 $a0 包含指针。所以这是一个整数的地址,我们需要返回它。

assembly mips

2
推荐指数
1
解决办法
6855
查看次数

处理/定义 poll 系统调用的 struct pollfd 数组的有效方法

我正在使用 poll 来实现具有多路复用的客户端-服务器模型的服务器端。

服务器正在运行一个主循环。
在每个循环中,我都会检查 struct pollfd 数组中的所有 fd,直到找到n包含我内容的套接字(其中n是 poll 返回的数字)。
此外,使用 poll 时没有超时(-1 作为参数)。

因此,如果在侦听套接字上请求新连接,我会将套接字和一些客户端信息插入到我保留的活动连接列表中。

处理 poll 数组最有效的方法是什么?

我是否应该定义一个大小为 10 的小数组,并且如果有更多客户端为大小为 20 或 50 的数组重新分配内存?

或者我应该:(a)释放 struct pollfd 类型的数组,并且(b)重新分配它,其大小等于列表的大小(监听套接字+1)=>每次客户端关闭连接时(因此我必须从数组中删除一个元素(可能将套接字设置为-1,以便 poll 忽略它)导致数组中未使用的空间)

你有什么建议吗?

感谢您的时间


编辑: 我想我已经找到了一个解决方案,每次客户端断开连接时都使用 realloc 和 memmove 进行移位,以覆盖 fds 数组中的套接字。

c sockets client-server polling

2
推荐指数
1
解决办法
3866
查看次数

从fread读取文本文件时获取' '或'@'符号

我想从文本文件中读取80个字符,将它们保存为字符串,然后打印该字符串进行验证.我正在使用fread并拥有此代码:

char message[80];
size_t nread = fread(message, 1, sizeof(message), fp);
printf("Message received: \"__%s__\"\n", message);
Run Code Online (Sandbox Code Playgroud)

输出是:

收到的消息:"__我很想改变这个世界,但他们不会
__"

当整个短语不在文件中时

和:

__我很乐意改变世界,但他们不会给我源代码
@__

当整个短语在文件中时.

我试过删除它并重写文本,但我再次获得相同的输出.

怎么了?什么与charset?

c io file fread

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

Android 2.3 API不可用作AVD的目标选项

我是Android开发的新手,我正在尝试创建一个AVD来测试应用程序,然后将其推送到我的手机(htc欲望运行android 2.3.5).

我正在使用ADT软件包,并且使用SDK管理器我已经下载了这些:

  1. 4.2.2(API 17)
  2. 4.1.2(API 16)
  3. 2.3.3(API 10)
  4. 2.2(API 8)

但是当试图选择AVD的目标时,唯一可用的选项是API 17,16和8.

怎么了?

更新: 我已经尝试删除和重新下载API,它出现在android-sdk/platforms目录中.

android android-virtual-device

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

使用C++,如何从派生类方法调用基类方法并将其应用于作为参数传递的对象?

我无法弄清楚如何从派生类方法调用基类方法,但同时在作为参数传递的对象上应用此方法调用.

我的意思是:

class Animal
{ 
    virtual void eat(Animal& to_be_eaten) = 0;
 };

class Carnivores: public Animal
{ 
    virtual void eat(Animal& to_be_eaten) { /*implementation here*/}

};

class Wolf : public Carnivores
{ 
    virtual void eat(Animal& to_be_eaten)
    { /*call eat method(of Base class) of Base to_be_eaten here*/ }
 }
Run Code Online (Sandbox Code Playgroud)

我想到了这样的事情

 dynamic_cast<Carnivores&>(to_be_eaten).eat(*this) //and got a segmentation fault
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

谢谢!

新编辑::更新了代码

c++ virtual inheritance

0
推荐指数
1
解决办法
6405
查看次数

从列表中删除后,为什么迭代器指向的数据会保留

在此示例程序中,为什么即使在列表为空之后,迭代器指向的数据的值也会保留?
由于在C++中实现迭代器(即对象的值保存在迭代器中),是否会发生某种情况,或者是因为内存段被声明为免费使用,但尚未更改?

#include <iostream>
#include <list>
using namespace std;
int main ()
{
    list<int> mylist;
    list<int>::iterator it = mylist.begin();
    cout << "printing: " << *it << endl;

    mylist.push_back(77);
    mylist.push_back(22);

    // now front equals 77, and back 22

    mylist.front() -= mylist.back();
    it = mylist.begin();
    cout << "printing: " << *it << endl;
    cout << "mylist.front() is now " << mylist.front() << '\n';
    // trying to delete all elements and then see how the iterators are handling it
    it = …
Run Code Online (Sandbox Code Playgroud)

c++ iterator list

0
推荐指数
1
解决办法
79
查看次数

使用assembla时如何将文件从repo root移动到trunk子目录

我在assembla创建了一个私有项目和一个存储库.
但我犯了一个错误,就是不遵循子目录的惯例.
所以,现在repo根目录中有源文件.
如何将它们移动到/ trunk subdir?

阅读这个问题,我看到我必须有shell访问权限才能运行svnadmin命令.
我试过绕过它们,并成功只获得了一个转储并创建一个新的回购.
我陷入了需要将转储加载到/ trunk目录的步骤 - 我只能将它再次加载到root中.

我认为这svn move不是一个好的选择,因为可能有一个案例想要回到旧版本,但由于我处于项目开发的早期阶段,我不太可能想要这样做.
我应该试试svn move吗?如果是这样,我该怎么做?svn move ./ ./trunk/会做?

svn

0
推荐指数
1
解决办法
2024
查看次数