首页 \ 问答 \ 如何分配结构的内存?(How to allocate memory of a struct?)

如何分配结构的内存?(How to allocate memory of a struct?)

我正在尝试为发送方结构分配内存并将其清零,但我不确定我是否正确执行此操作。 我正在尝试学习如何在我做这个项目时用C管理内存。 如何测试它以查看我设置的内存? 我会尝试做什么,或者有更好的方法吗?

typedef unsigned char uchar;

typedef struct {
    uchar Seq;
    uchar Ack;
    uchar Flags;
} Header;

#define FRAME_PAYLOAD_SIZE 50
struct Frame_t
{
    Header header;
    char data[FRAME_PAYLOAD_SIZE];
    uchar CRC;
};
typedef struct Frame_t Frame;

struct Sender
{
    uchar winSize;

    struct sendSlot {
        struct timeval timeout;
        Frame msg;
    } sendQ[5];
};


    initSend(Sender* sender) {
        sender->winSize = -1;

        char* send_buf = (char*) malloc(5 * sizeof(sender->sendQ[0]));
        memset(send_buf, 0, 5 * sizeof(sender->sendQ[0]));
        int i;
        for (i=0; i<sizeof(sender->sendQ)/sizeof(sender->sendQ[0]); i++) {
             memset(sender->sendQ[i].timeout, 0, sizeof(struct timeval));
            sender->sendQ = NULL;
         }
    }

I am trying to allocate memory and zero it out for the sender struct but I'm not sure if I am doing this correctly. I'm trying to learn how to manage memory in C while I am doing this project. How can I test it to see what I set the memory to? And will what I am trying to do work, or is there a better way of doing this?

typedef unsigned char uchar;

typedef struct {
    uchar Seq;
    uchar Ack;
    uchar Flags;
} Header;

#define FRAME_PAYLOAD_SIZE 50
struct Frame_t
{
    Header header;
    char data[FRAME_PAYLOAD_SIZE];
    uchar CRC;
};
typedef struct Frame_t Frame;

struct Sender
{
    uchar winSize;

    struct sendSlot {
        struct timeval timeout;
        Frame msg;
    } sendQ[5];
};


    initSend(Sender* sender) {
        sender->winSize = -1;

        char* send_buf = (char*) malloc(5 * sizeof(sender->sendQ[0]));
        memset(send_buf, 0, 5 * sizeof(sender->sendQ[0]));
        int i;
        for (i=0; i<sizeof(sender->sendQ)/sizeof(sender->sendQ[0]); i++) {
             memset(sender->sendQ[i].timeout, 0, sizeof(struct timeval));
            sender->sendQ = NULL;
         }
    }

原文:https://stackoverflow.com/questions/33191801
更新时间:2022-06-21 21:06

最满意答案

如果你需要一个隔离范围,那么有两个选项第一个选项是使用回调updateDisplayText如下所示:

JS

app.controller('controller11', ['$scope', function ($scope) {
    $scope.displayText = "nature animal plant";
    $scope.updateDisplayText = function(text) {
        $scope.displayText = text;
    }
}]);
app.directive("blurredFocused", [function () {
    return {
        restrict: "A",
        priority: -1,
        scope: {
            updateDisplayText: "="
        },
        link: function (scope, ele, attrs) {
            ele.on("blur", function () {
                scope.$apply(function () {
                    scope.updateDisplayText("nature animal plant");
                });

            });
            ele.on("focus", function () {
                scope.$apply(function() {                   
                    scope.updateDisplayText("networkText");
                }
                );
            })
        }
    }
}]);

HTML

<div class="topSearchView">
    <input type="text"
               blurred-focused='databaseForm.connectionName' update-display-text="updateDisplayText" name="connectionName">
</div>
<div class="resultView">
    <ul>
        <li>
            <span>{{displayText}}</span>
        </li>
    </ul>
</div>

第二种方法是将displayValue作为对象,如下所示:

JS

app.controller('controller11', ['$scope', function ($scope) {
    $scope.displayText = {value: "nature animal plant"};
}]);
app.directive("blurredFocused", [function () {
    return {
        restrict: "A",
        priority: -1,
        scope: {
            displayText: "="
        },
        link: function (scope, ele, attrs) {
            ele.on("blur", function () {
                scope.$apply(function () {
                    scope.displayText.value = "nature animal plant";
                });

            });
            ele.on("focus", function () {
                scope.$apply(function() {                   
                    scope.displayText.value = "networkText";
                }
                );
            })
        }
    }
}]);

HTML

<div class="topSearchView">
    <input type="text"
           blurred-focused='databaseForm.connectionName' display-text="displayText" name="connectionName">
</div>
<div class="resultView">
    <ul>
        <li>
            <span>{{displayText.value}}</span>
        </li>
    </ul>
</div>

If you need an isolate scope, then there are two options The first option is to use callback updateDisplayText like this:

JS

app.controller('controller11', ['$scope', function ($scope) {
    $scope.displayText = "nature animal plant";
    $scope.updateDisplayText = function(text) {
        $scope.displayText = text;
    }
}]);
app.directive("blurredFocused", [function () {
    return {
        restrict: "A",
        priority: -1,
        scope: {
            updateDisplayText: "="
        },
        link: function (scope, ele, attrs) {
            ele.on("blur", function () {
                scope.$apply(function () {
                    scope.updateDisplayText("nature animal plant");
                });

            });
            ele.on("focus", function () {
                scope.$apply(function() {                   
                    scope.updateDisplayText("networkText");
                }
                );
            })
        }
    }
}]);

HTML

<div class="topSearchView">
    <input type="text"
               blurred-focused='databaseForm.connectionName' update-display-text="updateDisplayText" name="connectionName">
</div>
<div class="resultView">
    <ul>
        <li>
            <span>{{displayText}}</span>
        </li>
    </ul>
</div>

The second approach would be to make displayValue as an object, like this:

JS

app.controller('controller11', ['$scope', function ($scope) {
    $scope.displayText = {value: "nature animal plant"};
}]);
app.directive("blurredFocused", [function () {
    return {
        restrict: "A",
        priority: -1,
        scope: {
            displayText: "="
        },
        link: function (scope, ele, attrs) {
            ele.on("blur", function () {
                scope.$apply(function () {
                    scope.displayText.value = "nature animal plant";
                });

            });
            ele.on("focus", function () {
                scope.$apply(function() {                   
                    scope.displayText.value = "networkText";
                }
                );
            })
        }
    }
}]);

HTML

<div class="topSearchView">
    <input type="text"
           blurred-focused='databaseForm.connectionName' display-text="displayText" name="connectionName">
</div>
<div class="resultView">
    <ul>
        <li>
            <span>{{displayText.value}}</span>
        </li>
    </ul>
</div>

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)