【问题标题】:How to dynamically allocate a struct and it's TCHAR member array with calloc?如何使用 calloc 动态分配结构及其 TCHAR 成员数组?
【发布时间】:2011-07-26 21:08:40
【问题描述】:

我可以很容易地在堆栈上设置一个结构:

struct sArray
{
TCHAR sName[512];
};
struct sArray sKeys[2048] = {0};

但这占用了太多的堆栈空间。

相反,我想把它全部放在堆上,所以我想出了这个:

struct sArray
{
    TCHAR *sName;
};
struct sArray *sKeys = (sArray *) calloc(2048, sizeof(sArray));

如何为 sName 动态分配内存?我试过了,它没有编译:

TCHAR *sKeys[0].sName = (TCHAR *) calloc(512,sizeof(TCHAR));

我真的在这里忽略了一些东西。有人可以帮忙吗?谢谢。

【问题讨论】:

  • 我试过这个:struct sArray { TCHAR *sName; // Dynamically sized }*sKeys[2048]; for (DWORD i=0;i<2048;i++) sKeys[i] = (sArray *) calloc(1,sizeof(sArray)); 我应该对 1 做 calloc 吗?

标签: dynamic-allocation


【解决方案1】:

随便用

sKeys[0].sName = (TCHAR *) calloc(512,sizeof(TCHAR));

(前面没有 TCHAR *)

【讨论】:

  • 运行时检查失败 #3 - 变量 'sKeys' 未经初始化就被使用了。
  • 你把calloc拿出来了吗?如果您执行初始的struct sArray *sKeys = (sArray *) calloc(2048, sizeof(sArray));,您应该不会收到运行时错误。顺便说一句,我假设语言是 C?是对的吗? '因为如果它是 C++,你就错了,应该使用new
  • 是的,我错误地取出了calloc。它是 C++,那么我该如何使用new
【解决方案2】:

试试这个:

#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <Psapi.h>
#include <strsafe.h>
#include <cstring>

typedef struct MyData {
    TCHAR processPath[ 32 ];
} MYDATA, *PMYDATA;

int main()
{
    PMYDATA pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
    strcpy(pData->processPath, TEXT ("C:\\Windows\\System32\\notepad.exe")); 
}

我用这个命令编译:

"C:\MinGW64\bin\g++.exe" -o ThreadExample.exe ThreadExample.cpp -lpsapi

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2022-11-07
    • 2020-05-02
    • 2012-08-27
    • 2017-06-11
    • 2020-05-26
    相关资源
    最近更新 更多