2012-09-18 22 views
0

今天我正在用malloc和整數指針搞亂。該程序設置爲將一個內存位置分配給一個整型指針,然後用一堆整數像數組填充內存位置,然後打印所有整型。問題是什麼時候它完成運行它崩潰。我懷疑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; 
} 

請幫助。 謝謝!

+0

我打賭它不是'malloc',而是'名[X] ='.. – 2012-09-18 20:09:08

+0

如果在Linux上,學會用'GCC編譯-Wall -g'並用'gdb'和'valgrind'(有時也用'strace'或'ltrace')進行調試。 –

回答

3

您正在分配內存以僅存儲一個int。你需要的是:

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

8
name = malloc(sizeof(int)); 

是問題所在。這樣你可以只在數組中存儲一個int。嘗試

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

改爲。

+0

那我可以問爲什麼要打印所有500個整數?還有沒有其他方法可以在malloc聲明中沒有指定數字的情況下執行此操作? – Icarus

+0

@ Anj17 - malloc語句中的具體數字*不是一個好主意。請看下面的回覆。 – paulsm4

+0

@ Anj17它會打印所有數字,因爲它會調用未定義的行爲。 UB並不意味着它**必須**崩潰,這意味着它可以崩潰並做其他事情**。不,如果你想存儲'num'整數,你必須明確地確定'sizeof(int)* num'字節的malloc。 – 2012-09-18 20:16:27

4

呃,「malloc()」不會崩潰你的程序。

崩潰程序:)

幾點建議:

  1. 檢查 「名稱=的malloc()」 返回NULL(即檢查錯誤)。

  2. 請勿 INT分配空間( 「的sizeof(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; 
} 
+0

是的,檢查malloc的返回是非常重要的。有些時候沒有內存可用,或者出於某種原因malloc無法訪問它。 – fooOnYou

+0

事實上,不OP是崩潰的程序,而是內核:) – 2012-09-18 20:46:52

+0

問:是不是有點說你的保險槓導致崩潰,如果你進入磚牆和地板加速器?只是問';) – paulsm4