c语言二级指针申请空间问题

问题描述

c语言二级指针申请空间问题

char **data;
*data = malloc (100);
为什么段错误
应该怎么申请

解决方案

 *data = malloc (sizeof(char *) * 100);
for (int i = 0; i < 100; i++)
{
    data[i] = malloc(sizeif(char));
}

解决方案二:

**只申请两次。共1M左右内存
char **data=malloc(sizeof(char *)*100);
data[0] =malloc(1000000*sizeof(char));

for(int i=1;i<100;i++)
{
data[i] =data[i-1]+10000;
}
.....................
free(data[0]);
free(data);**

解决方案三:

**只申请两次。共1M左右内存
char **data=malloc(sizeof(char *)*100);
data[0] =malloc(1000000*sizeof(char));

for(int i=1;i<100;i++)
{
data[i] =data[i-1]+10000;
}
.....................
free(data[0]);
free(data);**

解决方案四:

申请 101次.100个指针空间,数据空间,每次申请100~199字节内存。
char **data=(char **)malloc(sizeof(char *)*100);

for(int i=0;i<100;i++)
{
data[i] =(char*)malloc(sizeof(char)*(100+rand()%100);
}
.....................
for(int i=0;i<100;i++)
free(data[i]);
free(data);**

解决方案五:

http://ask.csdn.net/questions/226143

解决方案六:

data没有初始化:

char **data, *p;
*data=p;
 p = (char*)malloc (100*sizeof(char));

解决方案七:

这样:

 data没有初始化:

char **data, *p;
data=&p;
 p = (char*)malloc (100*sizeof(char));

解决方案八:

C语言中的二级指针和二维数组问题
C语言中的二级指针和二维数组问题
C语言指针问题快速解惑

解决方案九:

char **data;
data = (char **) malloc(sizeof(char ));
for (i=0; i<100; i++)
{
data[i] = (char
) malloc(100 * sizeof(char));
}

时间: 2024-08-03 07:54:02

c语言二级指针申请空间问题的相关文章

C语言 二级指针详解及示例代码_C 语言

指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 int *.double *.char * 等. 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针. 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: int a =100; int *p1 = &a; int **p2 = &p1; 指针变量也是一种变量

C语言 字符串指针详解及示例代码_C 语言

C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在<C语言字符数组和字符串>中已经进行了详细讲解,这里不妨再来演示一下: #include <stdio.h> int main(){ char str[] = "http://c.biancheng.net"; int len = strlen(str), i; //直接输出字符串 printf("%s\n", str); //每次输出一个字符 for(i=0; i<

C语言 数组指针详解及示例代码_C 语言

数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element).数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存.以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示: 定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素.在C语言中,我们将第 0 个元素的地址称为数组的首地址.以上面的数组为例,下图是 arr 的指向: 下面的例子演示了如何以指针的方

C语言 用指针作为函数返回值详解_C 语言

C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> #include <string.h> char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1; }else{ return str2; } } int main(){ cha

c语言-关于结构体指针什么时候申请空间的问题

问题描述 关于结构体指针什么时候申请空间的问题 40C /*顺序栈的初始化*/ #include#include#include #define stack_size 3#define error -1typedef struct student{ int num; char name[10];//定义数组时开辟了空间}student*Student;//栈中的元素typedef struct linkstack{ student children[100]; int top; int base

c语言-C语言中二级指针修改数组问题。

问题描述 C语言中二级指针修改数组问题. 数组相当于一级指针,我写了一个二级指针被调用.结果它总是宕机,求指导,谢谢. 解决方案 这段程序编译会报错吧:cannot convert parameter 1 from 'char (*)[100]' to 'char **' 可以这样 试试看#include #include #include int getMemBuf(char*& p2){ char* tmp = NULL; tmp = (char*)malloc(100); strcpy(t

c语言-C语言二叉树中一个二级指针函数问题

问题描述 C语言二叉树中一个二级指针函数问题 static BSTREE_NODE** find(int data, BSTREE_NODE** root){ 39 if(! *root) return root; 40 else if(data == (*root)->data) return root; 41 else if(data < (*root)->data) 42 return find(data,&(*root)->left); 43 else return

c语言指针之二级指针示例_C 语言

二级指针的概念 首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址,一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写,那么二级指针就是为了提供对于内存地址的读取或改写指针的表现形式是地址,核心是指向关系指针运算符"*"的作用是按照指向关系访问

C语言 一级指针与二级指针详细介绍_C 语言

指针的概念          指针就是地址, 利用这个地址可以找到指定的数据          指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针          指针变量就是存储地址的变量         int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据                     // 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节          使用指针, 实际上应该说成使用指针变量          1> 算术运算