簡體   English   中英

使用memset進行初始化的C動態分配數組

[英]C dynamic allocated array using memset for initialisation

所以我做了一個關於char數組的程序,該數組是dinamically分配的,程序尚未完成,但是我運行程序后有一些不同的返回值,沒有警告,編譯器沒有錯誤所以我不知道為什么我得到這個也有時程序崩潰..

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(){
int n,i;
char *tab=NULL;
printf("New size of array: ");
scanf("%d",&n);
tab=(char*)malloc(n*sizeof(char));
memset(tab,'X',n*sizeof(tab));
for(i=0;i<n;i++)
    printf("%c",tab[i]);
free(tab);
return 0;
}

C庫函數void * memset(void * str,int c,size_t n)通過參數str將字符c(unsigned char)復制到指向的字符串的前n個字符。

memset(tab,'X',n*sizeof(char));

您已經編寫了n * sizeof(tab),您正在將字符X復制到未知內存,這可能會在運行時導致崩潰。

在你的memset中你寫了n * sizeof(tab),我想你想寫:n * sizeof(char)

您還可以添加+1添加malloc的結尾並檢查返回值,僅為了安全起見。

看看這一行:

memset(tab,'X',n*sizeof(tab));

您將tab聲明為指針,指針的存儲大小超過一個字節。 將n乘以所需數組的大小將導致您將數據復制到您不允許訪問的內存空間,這就是您遇到分段錯誤的原因。

如果必須使用sizeof,請執行以下操作:

memset(tab,'X',n*sizeof(char));

或者更好,只需這樣做:

memset(tab,'X',n);

因為char是一個字節,n是1 = n。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM