c - 指向结构的指针数组,调试时只有 SIGSEGV

标签 c pointers initialization

以下代码会引发 SIGSEGV,但仅限于调试时。

#include <stdio.h>
#include <stdlib.h>

typedef struct enemy_desc
{
int type;
int x;
int y;
}enemy;

int main()
{
    enemy **enemies;
    enemies=(enemy **)malloc(sizeof(enemy *)*16);

    enemies[0]->type=23;

    printf("%i",enemies[0]->type);
    return 0;
}

最佳答案

您只是为 16 个指向敌人的指针创建了空间,但并未创建您尝试使用的实际敌人对象。

这是一个例子,我创建了一个敌人对象指向数组中的第一个指针。

#include <iostream>

typedef struct enemy_desc
{
int type;
int x;
int y;
}enemy;

using namespace std;
int main(int argc, char **argv)
{
    enemy **enemies;
    enemies=(enemy **)malloc(sizeof(enemy *)*16);
    memset(enemies, 0, sizeof(enemy*)*16);

    enemies[0] = (enemy *) malloc(sizeof(enemy));
    memset(enemies[0], 0, sizeof(enemy));

    enemies[0]->type=23;
    printf("type: %i  x: %i  y: %i\n\n",enemies[0]->type, enemies[0]->x, enemies[0]->y);

    enemies[0]->x = 10;
    enemies[0]->y = 25;
    enemies[0]->type= 7;
    printf("type: %i  x: %i  y: %i\n\n",enemies[0]->type, enemies[0]->x, enemies[0]->y);

    free(enemies[0]);
    free(enemies);
    return 0;
}

关于c - 指向结构的指针数组,调试时只有 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503688/

相关文章:

c - C 如何处理带前导零的整数文字,atoi 又如何?

c - 无法在 VS 2010 中调试应用程序,抛出错误 : cannot open the pdb file

c++ - 返回局部变量 C++ 的指针

c - 为什么 C 中未初始化的变量仍然产生输出

Ruby:通过模块添加东西来初始化方法

c - 如何将常量分配给指针?

C# 从 C DLL 导入一个结构

c - 检测到堆栈粉碎 - 在通过指针更新函数中的结构后中止

c - 纯粹使用指针动态分配二维数组

wolfram-mathematica - 如何运行调色板的初始化代码?