0

今天我在搞乱 malloc 和整数指针。该程序已设置,因此它将一个内存位置分配给一个整数指针,然后用一堆整数(如数组)填充内存位置,然后打印所有整数。问题是当它完成运行时它会崩溃。而且我怀疑 malloc 导致了这个问题。

这是代码

#include<stdio.h>
#include<stdlib.h>
int main(){

    int *name,x;
    char y;
    name=malloc(sizeof(int));
    for(x=0;x<500;x++){
        name[x]=x;
    }
    for(x=0;x<500;x++){
        printf("%d ",name[x]);
    }

    scanf("%c",&y);
    free(name);
    return 0;
}

请帮忙。谢谢!

4

3 回答 3

8
name = malloc(sizeof(int));

是问题所在。这样,您只能在数组中存储一个 int。尝试

name = malloc(sizeof(int) * 500);

反而。

于 2012-09-18T20:09:06.910 回答
4

呃,“malloc()”不会让你的程序崩溃。

你正在崩溃你的程序:)

建议:

  1. 检查返回 NULL 的“name=malloc()”(即检查错误)。

  2. 不要为1 个int 分配空间(“sizeof(int)”可能是四个字节),然后尝试写入500 个int :)

  3. 不要在代码中乱扔“500”之类的“幻数”——改用常量。

建议更改:

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

#define NELMS 500

int main(){

    int *name = NULL,x;
    char y;
    name=malloc(sizeof(int) * NELMS);
    if (!name) {
      perror ("Unable to allocate memory!");
      return 1;
    }
    for(x=0;x<NELMS;x++){
        name[x]=x;
    }
    for(x=0;x<NELMS;x++){
        printf("%d ",name[x]);
    }

    scanf("%c",&y);
    free(name);
    return 0;
}
于 2012-09-18T20:10:38.917 回答
3

您正在分配内存以仅存储一个int. 你需要的是:

名称=malloc(500*sizeof(int));

于 2012-09-18T20:09:44.200 回答