2 iseuwei ISEUWEI 于 2016.03.12 13:52 提问

结构体构成的栈初始化报错问题

char *str;似乎把这个写进结构体然后调用malloc()就报错了,各位有遇到过吗?是不是这样啊?

3个回答

AlbertoNo1
AlbertoNo1   2016.03.12 15:13
已采纳

结构体里包含指针类型时,动态申请结构体内存并不会报错,但是在使用之前要对这个指针类型申请指向的内存。

u010298834
u010298834   2016.03.12 15:11

我试了一下没报错啊!你是不是其他地方写的有问题?

ISEUWEI
ISEUWEI 我想把截屏发上来,怎么发呀,我是初学c语言
2 年多之前 回复
AlbertoNo1
AlbertoNo1   2016.03.12 15:19

#include "stdafx.h"
#include
#include

typedef unsigned int UINT32;
typedef unsigned short USHORT;
typedef unsigned char UCHAR;

typedef struct tagTest
{
USHORT usA;
USHORT usB;
UINT32 uiC;
UCHAR *pucBuff;

}Test_S;

int _tmain(int argc, _TCHAR* argv[])
{
Test_S *pstTest = NULL;

pstTest = (Test_S*)malloc(sizeof(Test_S));

if (NULL == pstTest)
{
    return 1;
}

pstTest->pucBuff = (UCHAR*)malloc(sizeof(UINT32));

if (NULL == pstTest->pucBuff)
{
    return 1;
}

*((UINT32*)(pstTest->pucBuff)) = 0x12345678;

printf("0x%x", *((UINT32*)(pstTest->pucBuff)));

free(pstTest->pucBuff);
free(pstTest);

getchar();
return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于结构体对其方式错误引起的变量赋值错误
今天在编写代码的时候出现了一个很奇怪的错误,我把一个变量的值是1赋值给另外的一个结构体里面的整型变量,单步调试的时候发现赋值后变量变成了65536,而不是1.自己百思不得其解,然后问了同事他说有可能是地址被覆盖了。后面认真看了才发现结构变量的地址偏移少了2个字节。现在来说说解决这个问题的一个过程,自己也做下记录:   1.查看结构变量的地址。在调试窗口的Autos窗口看到的地址是1DC4454.
链栈:栈的链式存储结构
转至:http://www.nowamagic.net/librarys/veda/detail/2290 前面讲完了栈的顺序存储结构,我们现在来看看栈的链式存储结构,简称为链栈。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。单链表有头指针,而栈顶指针也是必须的,那干吗不让它俩合二为一呢,所以比较好的办法是把栈顶放在单链表的头部。另外,都已经有了栈顶在头部了,单链表中比较
C语言实现使用动态数组来构造栈结构
我在面前一篇博客《C语言实现使用静态数组来构造栈结构》中使用了静态数组来模拟栈的操作。静态数组的大小是在代码中写死的,是存储在用户栈上面的,使用起来不灵活。在这篇博客中我会使用动态数组来构造,此时使用的内存是动态申请的,只是在数组的创建和释放上面有差别,其他的使用都一样。注意:动态申请的内存需要我们手动去释放,因为这些占用的内存是在运行时堆上,不会在程序退出后释放。而存放在栈上面的会在程序退出后自
go学习(六)——结构体初始化
package main import ( "fmt" ) type Info struct { Cpu string Mem string Disk string } type Product struct { Info Id string Name string } func main() { p1 := Product
c语言结构体----初始化bug1
//最近在用结构体时发现一个初始化的小bug /**工具:vs community 2015 bug类型:结构体 错误原因:初始化错误 **/typedef struct computer {int computerset;//机位号 int state[6]; //机位的占用状态,占用为1空置为0.共6个时间段 } c; c com[50]; for (comsetcount
【数据结构实验一】线性表
写在前面: 教材:数据结构(C语言版) 严蔚敏 吴伟民 编著 清华大学出版社 实验跟随教材编写的顺序 实验一 线性表 实验目的: 理解线性表的创建、插入和删除操作;掌握顺序表的定义、插入和删除操作时对数据元素的移动。 实验内容: 1. 通过结构体声明顺序存储的线性表; 2. 在初始化操作中,对上述线性表分配存储空间,如可容纳100个元素; 3. 编写插入元素的操作; 4.
数据结构 第6讲 链栈
数据结构 第6讲 链栈  进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。顺序栈和链栈图解: 顺序栈是分配一段连续的空间,需要两个指针,base指向栈底,top指向栈顶。而链栈每个结点的地址是不连续的,只需要一个栈顶指针即可。 从上图可以看出,链栈的每个结点都包含两个域,数据域和指针域,是不是和单链表一模一样?那么我们就可以按单
结构体初始化列表错误
结构体初始化列表错误(金庆的专栏 2016.12)struct A{    int a = 0;};int main(){    A a{0};    return 0;}报以下错误:error C2440: “初始化”: 无法从“initializer list”转换为“A”note: 无构造函数可以接受源类型,或构造函数重载决策不明确去除 A.a 的类内初始化就好了。struct A{    
双向链表(结构体+指针)
首先,表中的各个元素称作“结点”。双向链表的结点时结构体,有数据本体,指向前一元素的指针prev以及指向后一元素的指针next组成。这些结构体通过指针构成一个链表,就形成了双向链表。...
struct 结构体的定义及初始化问题
/*****************************/ //以上说明,结构体也没啥特殊的 ,跟普通的数据类型定义变量是一样的。。。 //程序在定义变量的时候,已经分配好了内存空间,只是里面存储的数据是随机的,是垃圾值。 //对于非指针变量来说,,照样可以输出或者操作,仅仅是可能会得到不正确的结果,程序是可以正常运行的。 //对于指针变量来说,同样。但是其内存空间存储的值 是被当做另外一个地址看待的,,所以 不初始化成有效的地址值得话, //程序可能会崩溃或者遇到不可预料的结果。 //注:memset