我的代码中有这个:
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)
我需要实现一个指向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) 我看到了这个问题,我想知道我们如何取消对 int 指针的引用?
这是代码:
int load(int *ptr)
{
return *ptr;
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道 $a0 包含指针。所以这是一个整数的地址,我们需要返回它。
我正在使用 poll 来实现具有多路复用的客户端-服务器模型的服务器端。
服务器正在运行一个主循环。
在每个循环中,我都会检查 struct pollfd 数组中的所有 fd,直到找到n包含我内容的套接字(其中n是 poll 返回的数字)。
此外,使用 poll 时没有超时(-1 作为参数)。
因此,如果在侦听套接字上请求新连接,我会将套接字和一些客户端信息插入到我保留的活动连接列表中。
处理 poll 数组最有效的方法是什么?
我是否应该定义一个大小为 10 的小数组,并且如果有更多客户端为大小为 20 或 50 的数组重新分配内存?
或者我应该:(a)释放 struct pollfd 类型的数组,并且(b)重新分配它,其大小等于列表的大小(监听套接字+1)=>每次客户端关闭连接时(因此我必须从数组中删除一个元素(可能将套接字设置为-1,以便 poll 忽略它)导致数组中未使用的空间)
你有什么建议吗?
感谢您的时间
编辑: 我想我已经找到了一个解决方案,每次客户端断开连接时都使用 realloc 和 memmove 进行移位,以覆盖 fds 数组中的套接字。
我想从文本文件中读取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?
我是Android开发的新手,我正在尝试创建一个AVD来测试应用程序,然后将其推送到我的手机(htc欲望运行android 2.3.5).
我正在使用ADT软件包,并且使用SDK管理器我已经下载了这些:
但是当试图选择AVD的目标时,唯一可用的选项是API 17,16和8.
怎么了?
更新: 我已经尝试删除和重新下载API,它出现在android-sdk/platforms目录中.
我无法弄清楚如何从派生类方法调用基类方法,但同时在作为参数传递的对象上应用此方法调用.
我的意思是:
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++中实现迭代器(即对象的值保存在迭代器中),是否会发生某种情况,或者是因为内存段被声明为免费使用,但尚未更改?
#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) 我在assembla创建了一个私有项目和一个存储库.
但我犯了一个错误,就是不遵循子目录的惯例.
所以,现在repo根目录中有源文件.
如何将它们移动到/ trunk subdir?
阅读这个问题,我看到我必须有shell访问权限才能运行svnadmin命令.
我试过绕过它们,并成功只获得了一个转储并创建一个新的回购.
我陷入了需要将转储加载到/ trunk目录的步骤 - 我只能将它再次加载到root中.
我认为这svn move不是一个好的选择,因为可能有一个案例想要回到旧版本,但由于我处于项目开发的早期阶段,我不太可能想要这样做.
我应该试试svn move吗?如果是这样,我该怎么做?svn move ./ ./trunk/会做?